我正在处理一个我必须启动应用程序的部分,这个应用程序应该保持在后台运行。我尝试启动进程cmdlet如下:
try {
Invoke-Command -Session $newsession -Scriptblock {
Write-Host "Cd'ing and starting Vesper on" $loadvm
Start-Process cmd -ArgumentList "/c C:\vesper_cpt\Vesper.exe -auto" -verb runas
} -ErrorAction Stop
} catch [Exception] {
echo "Error while running the remote command", $_.Exception.GetType().FullName, $_.Exception.Message
Remove-PSSession $newsession
exit 1
}
删除-PS会话$新会话
发生的情况是,我可以看到它在目标计算机上启动了一个cmd进程,但随后它立即消失。我不确定我应该在这里做些什么才能让该进程始终启动并运行。另一方面,我还尝试了调用表达式使用此cmdlet,我可以看到进程在远程计算机上启动良好,但powershell脚本从未返回,这就是为什么想到使用启动过程。有什么建议吗?
1条答案
按热度按时间50few1ms1#
在尝试了很多方法之后,比如调用表达式,启动进程,我找到了为什么我的进程在远程机器上启动后就退出的原因。原因是我正在运行的应用程序是一个Java应用程序。而且,JVM不允许守护进程线程在机器上运行进程。另一方面,如果至少有一个用户线程是活动的,Java运行时不会终止你的应用程序。
在我的设置中,我在远程计算机上运行应用程序(在本例中为Vesper.exe),因此我创建了一个New-PSSession,最后,我创建了Removing-PSSession。因此,没有用户线程可用于运行应用程序,并且应用程序正在关闭。
这个问题的解决方案不是Removing-PSSession,而是Exit-PSSession。Exit-PSSession使线程保持活动状态,并且您的应用程序不会终止。请注意,如何退出应用程序将是您的责任,因为即使您的程序完成,应用程序仍将在远程计算机上运行。
这取决于你想做什么,如果异常被捕获。你可以删除或退出会话根据您的环境设置。
我从以下两个问题中找到了答案:
希望这个有用。
谢谢