【问题标题】:Wix: Can execute a custom action before InstallValidate?Wix:可以在 InstallValidate 之前执行自定义操作吗?
【发布时间】:2017-07-03 21:54:45
【问题描述】:

在卸载过程中,安装程序显示以下消息:

"The setup must update files or services that cannot be updated while the system is running. If you choose to continue, a reboot will be required to complete the setup."

我认为这是由于卸载时安装的服务仍在运行引起的。所以,我尝试编写一个自定义操作来阻止它。但是,它似乎不起作用。

如果我将动作设置为Execute='deferred' Impersonate='no',它只允许我在InstallInitializeInstallFinalize之间设置动作,所以我必须将其设置为“立即”。

<CustomAction BinaryKey='CustomActions' Id='StopService' DllEntry='StopService' Execute='immediate' />

<Custom Action="StopService" Before="InstallValidate">REMOVE="ALL"</Custom>

另外请注意,由于某些原因,我必须使用自定义操作手动安装服务,而不是使用 Wix。这就是我尝试手动删除它的原因。

【问题讨论】:

  • 您应该在安装完成后调用自定义操作。然后在您的自定义操作之后,您可以调用 WIX 操作来安装服务。
  • 感谢您的建议,但该服务通过自定义操作安装得很好。我关心的是如何在卸载过程中抑制上述消息。
  • @jcha,也许可以运行一个特殊的可执行文件,在卸载产品之前从引导程序停止服务。我也有同样的问题。。
  • 对于类似的情况,我使用自定义操作通过运行自定义操作 Before="RemoveFiles" 来卸载服务。我确信这是否适用于所有场景。

标签: service wix custom-action


【解决方案1】:

您无法在 InstallInitialize 之前运行提升的自定义操作。如果您要正常安装服务,MSI 会为您停止服务,并且不会显示正在使用的消息。

【讨论】:

  • 感谢您的信息,但我仍然不清楚。因为如果我将自定义操作放在InstallInitialize 之后,它会在卸载InstallValidate 步骤期间抛出消息“安装程序必须更新无法更新的文件或服务...”。
  • 无法运行提升的自定义操作来阻止文件使用中的消息。如果您使用内置服务功能,MSI 将不会显示正在使用的消息,因为它知道它将停止并删除该服务。
  • @BobArnson ,这不太正确......我遇到了 wix 3.10.3 的这个问题。 Wix 正在管理一项服务,但在升级时仍会在验证步骤中抛出该消息。
  • 如果有其他程序在不同位置使用同名文件,那么还会显示一个正在使用的文件对话框。就我而言,它是来自 C 运行时的文件,可用于大量文件。
猜你喜欢
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多