更新.
在编写这个问题时,我错误地假设InstallUtil将其状态存储在%ERRORLEVEL%变量中,而不是内部值ERRORLEVEL__中,这是因为它的意外行为。我改了标题,因为它可能会误导人。有关更多细节,请参阅此https://stackoverflow.com/a/62648857/4375327和下面的评论。
(顺便提一句,微软https://learn.microsoft.com/en-us/dotnet/framework/tools/installutil-exe-installer-tool退出状态代码,也没有指定是否存在多个错误状态。)
我正在为Windows服务编写安装和卸载脚本。我使用与InstallUtil框架一起提供的.NET。
在一个所以回答中,我注意到这段代码:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
installutil.exe "C:\Services\myservice.exe"
if ERRORLEVEL 1 goto errorERRORLEVEL检查总是失败。出于好奇,我用这句话代替了上面的测试:
IF NOT '%ERRORLEVEL%' == '0'这一次,状态被正确捕获。为什么?
在问我读https://devblogs.microsoft.com/oldnewthing/20080926-00/?p=20743之前,我仍然不明白为什么https://devblogs.microsoft.com/oldnewthing/20080926-00/?p=20743会这样做。
发布于 2020-06-30 01:07:53
由于您已经声明installutil返回-1 (如果失败),if errorlevel 1 goto error将永远不会被选中,因为if errorlevel 1的意思是“如果%错误级别%为1或更高”,而-1则小于1。
if not '%errorlevel%'=='0'工作是因为-1不是0。
https://stackoverflow.com/questions/62648723
复制相似问题