WiX制作的MSI安装VSTO插件遇文件独占锁问题求助
VSTO插件MSI安装问题分析与解决方案
核心问题梳理
- Office运行时安装插件,仅弹出重试/取消对话框,无忽略选项,日志报1306→1603错误,原因是文件被Office进程独占锁定,Restart Manager未正确触发标准FilesInUse流程
- 静默安装失败,未执行强制重启/进程关闭操作
- 单独MSI静默安装修复后,Burn调用仍失败,推测与
MSIFASTINSTALL=7跳过成本计算有关
关键修复步骤
1. 修复MSI单独运行的交互/静默问题
恢复MSIRESTARTMANAGERCONTROL默认值,同时设置MSIRMSHUTDOWN=1,让Restart Manager在静默模式下自动关闭锁定的Office进程,安装完成后重启进程。在WiX中添加:
<Property Id="MSIRMSHUTDOWN" Value="1" />
MSIRMSHUTDOWN=1:强制Restart Manager自动处理进程关闭,避免静默模式下直接报错- 保留默认
MSIRESTARTMANAGERCONTROL,确保交互模式下能正常触发进程关闭提示
2. 修复Burn调用MSI的异常
Burn默认会给嵌套MSI传递MSIFASTINSTALL=7,跳过文件锁定检测等成本计算步骤,需显式覆盖该参数:
<MsiPackage SourceFile="YourAddin.msi" SuppressMSI="no"> <MsiProperty Name="MSIFASTINSTALL" Value="0" /> </MsiPackage>
- 必须设置
SuppressMSI="no",否则Burn会忽略自定义MSI属性,继续使用默认的MSIFASTINSTALL=7 - 可额外添加Burn重启配置,确保安装后重启逻辑协同:
<Restart PromptRestart="yes" SuppressRestart="no" />
3. VSTO插件文件锁定优化
- 确保插件安装路径符合Office规范,避免因权限问题导致文件长期锁定
- 为插件文件添加
Shared="yes"和KeyPath="yes",帮助MSI识别共享文件锁定状态:<File Id="AddinDll" Source="YourAddin.dll" Shared="yes" KeyPath="yes" />
关键知识点补全
- MSIRMSHUTDOWN取值说明:
- 0:默认值,仅交互模式提示用户关闭进程,静默模式直接报错
- 1:自动关闭锁定进程并在安装后重启,适配静默/被动安装
- 2:自动关闭进程但不重启,可能导致Office无法加载新插件
- MSIFASTINSTALL参数影响:
- 7 = 跳过系统检查+文件成本计算+注册表成本计算,直接导致MSI无法检测文件锁定
- 0:执行完整成本计算与系统检查,必须显式覆盖Burn默认值
- Burn与Restart Manager协同:Burn自带重启管理逻辑,需确保嵌套MSI的Restart配置与Burn设置一致,避免冲突
内容的提问来源于stack exchange,提问作者Christopher Painter
相关产品推荐
相关产品推荐

