在系统文件检查之前,WiX在自定义操作中运行PowerShell脚本

时间:2018-01-30 17:43:47

标签: powershell wix windows-installer

我需要运行PowerShell脚本以在WiX卸载期间关闭特定的IIS应用程序池。 CustomAction定义如下:

<InstallExecuteSequence>
  <Custom Action="RunStopScript" After='InstallInitialize'>REMOVE="ALL"</Custom>
</InstallExecuteSequence>

并安排如下:

{{1}}

我修改了脚本,以便我可以在运行时立即看到,问题是在执行卸载时我仍然得到文件正在使用的提示,并且在脚本运行之前需要重新启动(仅此提示)如果脚本停止的应用程序池正在运行,则弹出)。脚本背后的想法是用户在进行卸载或主要升级时不会得到此提示。

1 个答案:

答案 0 :(得分:1)

InstallInUse对话框是否显示由InstallValidate设置,该对话框在InstallInitialize之前发生,并且也是未提升的,因此您无法在InstallValidate之前运行延迟的自定义操作。

您可以使用刻录引导程序来解决此问题,该刻录引导程序将启动MSI提升,然后您可以在InstallValidate之前安排自定义操作作为Execute="immediate" Impersonate="no"行为conda install -c /my_conda_channel numpy --offline --override-channels 并且它将能够停止那些IIS应用程序池。您在编译期间会收到ICE68警告,但您可以忽略它。

否则,我认为您可以隐藏“正在使用的文件”对话框。试试this answer中的建议。如果您在InstallInitialize之后立即安排延期操作,我认为您仍然可以避免重启。但是,如果某个其他意外程序持有正在使用的文件(记事本,无论出于何种原因的十六进制编辑器等),这可能会引起问题。所以要记住这一点。