我正在尝试使用PowerShell启动我的服务,但目前它失败了。我不知道它为什么会失败,但这不是重点。尝试启动主机时,我没有得到正确的退出代码,因此我的自动部署无声地失败。
我要做的是:
$cmd = "$folder" + "\MyService.exe"
try
{
& $cmd stop
& $cmd uninstall
& $cmd install
& $cmd start
}
catch
{
Write-Host "Error: Update of service failed"
exit 1
}
start
命令失败并显示以下信息:
Topshelf.Hosts.StartHost Error: 0 : The service failed to start., System.InvalidOperationException: Cannot start service MyService on computer '.'. ---> System.ComponentModel.Win32Exception: The service cannot be started, either because it is disabled or because it has no enabled devices associated with it
--- End of inner exception stack trace ---
at System.ServiceProcess.ServiceController.Start(String[] args)
at System.ServiceProcess.ServiceController.Start()
at Topshelf.Runtime.Windows.WindowsHostEnvironment.StartService(String serviceName)
at Topshelf.Hosts.StartHost.Run()
我从未进入我的powershell脚本的catch语句。
更新
请注意,我要求如何将方法转到catch语句而不是实际异常的解决方案。我已经解决了实际的异常,但是如果它失败了我希望将来有更好的反馈,那就是希望执行catch语句,而不是出现错误。
答案 0 :(得分:3)
try/catch
不能与exe一起使用。
myservice.exe
次呼叫后,您需要检查自动变量$LastExitCode
。
尝试这样的事情:
$out = & $cmd start
if ($LastExitCode -ne 0) # if exe returns 0 on success, if not change the condition accordingly
{
"ERROR: $out"
return # to exit script or do something else.
}