检测 .Net 框架需要重启

Detecting .Net framework Reboot required

我的 NSIS 安装程序会静默安装 .Net framework 4.0 以及我的应用程序包。平台为 Win Xp / 7 / 8.

ExecWait '"$TEMP\app-temp\dotNetFx40.exe" /q /norestart'

现在的问题是,如果 dotNetFx40 安装程序 return 需要使用 3010 代码重新启动,windows 应该在继续之前重新启动。我不能跳过这个,因为我的应用程序依赖于 .Net 框架,而且在安装过程中需要注册一些 dll 并存在 .Net。

为了解决这个问题,我可以显示一个消息框(YES_NO)并要求重新启动(在消息框 IDYES 上触发 NSIS Reboot 命令),下次启动后可以通过注册表 RunOnce 方法继续安装。

现在,只有当 .Net 安装程序报告 3010 错误时才应执行此操作,少数系统可能会出现这种情况,但并非每个系统都会出现这种情况。

我可以看到,事件查看器参考 RestartManager 记录了这一点,但我认为使用 NSIS 无法读取事件查看器。那么有没有其他方法可以读取 .Net 安装程序的 return 代码?

ExecWait会告诉你子进程的退出码:

ExecWait '"c:\path\app.exe" /whatever' [=10=]
DetailPrint [=10=]