6

我尝试使用 WIX 编写 MSI 安装程序。在卸载期间,我需要运行一个专门的自定义操作,首先停止我的服务,然后关闭应用程序。我InstallInitialize使用以下标记在事件发生后执行此操作:

<CustomAction Id='myCustomAction' BinaryKey='myDll' DllEntry='msiUninstallInitialize' Execute='deferred' Impersonate='no' />

<InstallExecuteSequence>
    <Custom Action='myCustomAction' After='InstallInitialize'></Custom>
</InstallExecuteSequence>

问题是,如果在我尝试使用我的 MSI 升级到较新的应用程序之前,我的应用程序的以前版本正在运行,我会收到重启管理器弹出此消息:

在此处输入图像描述

然后这个:

在此处输入图像描述

为了阻止它这样做,我添加了以下属性:

<Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />

但现在卸载程序显示此窗口:

在此处输入图像描述

所以我很好奇,如果我的应用程序正在运行,有什么方法可以禁用检查(我会在我的自定义操作处理过程中自己关闭它)?

4

2 回答 2

5

您已禁用重新启动管理器与 Windows 安装程序的交互,因此现在 Windows 安装程序正在回退到其旧行为 FileInUse 对话框。此行为记录在 MSIRESTARTMANAGERCONTROL 属性中。

我从未尝试过,但理论上您可以隐藏 FilesInUse 对话框(Dialog/@Hidden='yes')以导致对话框不显示。

于 2014-02-05T17:18:49.560 回答
1

解决方案是在Install Execution Stage的准备步骤之前移动停止服务和进程的自定义操作。

根据 AdvancedInstaller 的文档(强调我的):

准备中 - 验证所有卷是否有足够的空间用于安装。检查并通知用户是否正在使用任何安装文件。您可以为该组之后的操作设置延迟、回滚或提交标志。这些由完成执行操作组执行。您可以使用“无模拟”标志来提升它们。

但是,请务必注意,您不能在这些自定义操作上使用“无模拟”标志。

于 2017-04-10T19:10:39.537 回答