使用 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。
更新。
在写这个问题时,我错误地假设 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。