使用 ERRORLEVEL 检索 InstallUtil 的退出状态

Retrieving exit status of InstallUtil with ERRORLEVEL

更新。

在写这个问题时,我错误地假设 InstallUtil 将其状态存储在 %ERRORLEVEL% 变量而不是内部值 ERRORLEVEL 中,因为它的意外行为。我改写了标题,因为它可能会产生误导。有关更多详细信息,请参阅此 和我在其下方的评论。

(附带说明,Microsoft doesn't document 退出状态代码,也没有指定是否存在多个错误状态。)


我正在为 Windows 服务编写安装和卸载脚本。我使用 .NET Framework 提供的 InstallUtil

在一个SO answer中,我注意到了这段代码:

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
installutil.exe "C:\Services\myservice.exe"

if ERRORLEVEL 1 goto error

ERRORLEVEL 检查总是失败。出于好奇,我用这一行替换了上面的测试:

IF NOT '%ERRORLEVEL%' == '0'

这一次,状态被正确捕获了。为什么?

在询问之前我阅读了 ERRORLEVEL is not %ERRORLEVEL%,但我仍然不明白为什么 InstallUtil 会这样

既然你已经声明 installutil returns -1 如果它失败了,if errorlevel 1 goto error 将永远不会被拾取因为 if errorlevel 1 意味着“如果 %errorlevel% 是1 或更高”,-1 小于 1。

if not '%errorlevel%'=='0' 有效,因为 -1 不是 0。