我使用 iexpress.exe 快速创建基于批处理文件的简单安装程序。IExpress 向导提供“仅在需要时重新启动”选项。
但是我如何从批处理文件中得知需要重新启动?我尝试在 Windows 更新中使用退出代码 3016。但这不起作用。
顺便说一句:我调用批处理文件
cmd.exe /c my.bat
my.bat 的内容:
exit /b 3010
我使用 iexpress.exe 快速创建基于批处理文件的简单安装程序。IExpress 向导提供“仅在需要时重新启动”选项。
但是我如何从批处理文件中得知需要重新启动?我尝试在 Windows 更新中使用退出代码 3016。但这不起作用。
顺便说一句:我调用批处理文件
cmd.exe /c my.bat
my.bat 的内容:
exit /b 3010
我试图让 IExpress 识别返回码。我想你想要3010
,但不是3016
。命令也将是:
exit 3010
[不/b
——我们想从 中返回退出代码cmd
,而不是设置errorlevel
]。
但它没有用,这让我想知道 IExpress 是否甚至会费心检查它。
无论如何,我对 Process Monitor 进行了一些调查。安装过程运行后,IExpress 似乎立即检查PendingFileRenameOperations
注册表值以查看文件是否已标记为重命名(或删除)。如果有,它会确定需要重新启动,并采取您在 SED 文件中指定的操作(例如提示用户重新启动;或只是重新启动;或什么都不做)。
如果您不熟悉它,
PendingFileRenameOperations
注册表值是在下次系统启动时要移动或删除的文件列表。
您可以使用Sysinternals MoveFile来模拟这些计划在下次启动时重命名之一。添加movefile.exe
到您的 IExpress 存档,并在您的批处理文件中添加这样的行:
movefile.exe -accepteula foo bar
实际的文件名并不重要——只需使用您知道肯定不存在的文件即可。(只要您没有更改批处理文件中的目录,那仍然是一个文件,例如,%temp%\IXP000.TMP
。)
请注意,您需要为此运行提升权限(以管理员身份运行)。
在这里工作得很好。每次运行后都会弹出 IExpress,提示用户重新启动。