当命令失败时,如何让topshelf返回错误代码?

时间:2013-04-09 08:40:09

标签: powershell topshelf

我正在尝试使用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语句,而不是出现错误。

1 个答案:

答案 0 :(得分:3)

PowerShell中的

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.
}