3

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

4

1 回答 1

3

try/catch在 PowerShell 中不适用于 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.
}
于 2013-04-09T10:11:35.093 回答