我尝试使用WIX编写MSI安装程序。在卸载过程中,我需要运行一个专门的自定义操作,首先停止我的服务,然后关闭应用程序。我在InstallInitialize
事件后使用以下标记执行此操作:
<CustomAction Id='myCustomAction' BinaryKey='myDll' DllEntry='msiUninstallInitialize' Execute='deferred' Impersonate='no' />
<InstallExecuteSequence>
<Custom Action='myCustomAction' After='InstallInitialize'></Custom>
</InstallExecuteSequence>
问题是,如果我的应用程序的先前版本在我尝试使用我的MSI升级到更新版本之前运行,我会收到Restart Manager弹出此消息:
然后这一个:
为了阻止它这样做,我添加了以下属性:
<Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />
但是现在卸载程序显示了这个窗口:
所以我很好奇,如果我的应用程序正在运行,有没有办法禁用检查(我会在自定义操作处理期间自行关闭它)?
答案 0 :(得分:5)
您已禁用与Windows Installer的重新启动管理器交互,因此现在Windows Installer将回退到其旧行为FileInUse对话框。 MSIRESTARTMANAGERCONTROL Property记录了此行为。
我从来没有尝试过但理论上说你可以隐藏你的FilesInUse对话框(Dialog/@Hidden='yes'
)以使对话框无法显示。
答案 1 :(得分:1)
解决方案是移动您的自定义操作以停止您的服务&amp; 安装执行阶段中准备步骤之前的流程。
根据AdvancedInstaller的文档(强调我的):
准备 - 验证所有卷是否有足够的空间进行安装。 检查并通知用户是否正在使用任何安装文件。您可以为此组后的操作设置延迟,回滚或提交标志。这些由Finish Execution操作组执行。您可以使用“with without impersonation”标记来提升它们。
重要的是要注意,您不能在这些自定义操作上使用“没有模拟”标记。