Msiexec.exe /norestart参数失效致AutoCAD自动关闭问题排查
解决Msiexec /norestart参数失效导致AutoCAD自动关闭的问题
问题背景
在AutoCAD插件DLL中调用以下代码,原本可实现静默无重启模式执行安装包:
public int InstallUpdate(string installerLocation) { Process p = new Process(); p.StartInfo.UseShellExecute = true; p.StartInfo.CreateNoWindow = true; p.StartInfo.FileName = "msiexec"; p.StartInfo.Verb = "runas"; p.StartInfo.Arguments = "/i " + installerLocation + " /qn /norestart"; p.Start(); p.WaitForExit(); return p.ExitCode; }
近期出现异常:msiexec.exe的/norestart参数失效,安装完成后AutoCAD直接关闭,未按预期提示用户手动重启,且安装日志中出现此前没有的RESTART MANAGER相关信息。
解决方法
强制禁用重启逻辑:在msiexec命令行参数中添加
REBOOT=ReallySuppress属性,该属性会彻底覆盖Windows Installer的重启触发机制,无论安装包内部是否请求重启,都强制阻止系统或应用重启。修改后的参数示例:/i "C:\path\to\your\installer.msi" /qn /norestart REBOOT=ReallySuppress对应代码中参数部分调整为:
p.StartInfo.Arguments = $"/i \"{installerLocation}\" /qn /norestart REBOOT=ReallySuppress";(注意添加引号包裹安装路径,避免路径含空格时出错)
检查并修正安装包配置:部分MSI安装包可能在内部属性中设置了强制重启规则。可使用Orca工具打开MSI包,查看属性表中的
REBOOT项,若其值为Force或AutoAlways,将其修改为ReallySuppress;若无法修改安装包,通过命令行参数的REBOOT=ReallySuppress也可强制覆盖内部配置。调整进程启动配置:尝试指定
msiexec.exe的完整系统路径,并修改UseShellExecute设置,避免调用到非系统版本的msiexec:p.StartInfo.UseShellExecute = false; p.StartInfo.FileName = @"C:\Windows\System32\msiexec.exe"; p.StartInfo.Arguments = $"/i \"{installerLocation}\" /qn /norestart REBOOT=ReallySuppress"; // 若需提权,可通过其他方式确保进程以管理员权限运行排除AutoCAD重启管理器监控:通过Windows重启管理器API,将AutoCAD进程从重启资源列表中排除,避免其被安装过程中的重启管理器强制终止。核心步骤为:
- 调用
RmStartSession创建重启管理器会话 - 调用
RmRegisterResources注册AutoCAD进程ID,标记为无需重启的资源 - 执行安装后调用
RmEndSession结束会话
- 调用
内容的提问来源于stack exchange,提问作者Tamara Vučić
相关产品推荐
相关产品推荐

