Wix:如何使用 FileInUse 对话框

Posted

技术标签:

【中文标题】Wix:如何使用 FileInUse 对话框【英文标题】:Wix: How to use FileInUse dialog 【发布时间】:2012-04-26 04:31:31 【问题描述】:

安装应要求关闭所有浏览器:iexplore.exe、chrome.exe 和 firefox.exe,但应提示用户这样做。我无法显示 FileInUse 对话框。以下是相关部分 - 我错过了什么?使用 CloseMessage="yes",它们都会关闭,但我希望 FilesInUse 出现。

<UI>
  <UIRef Id="WixUI_InstallDir" />
  <UIRef Id="WixUI_ErrorProgressText" />
  <DialogRef Id="FilesInUse" />
  <DialogRef Id="MsiRMFilesInUse" />
</UI>

<InstallUISequence>
  <Custom Action="WixCloseApplications" Before="AppSearch" />
</InstallUISequence>

<InstallExecuteSequence>
  <Custom Action="WixCloseApplications" Before="InstallValidate" />
</InstallExecuteSequence>

<util:CloseApplication Id="CloseIE" CloseMessage="no"
                       Description="Internet Explorer is still running."
                       ElevatedCloseMessage="no"
                       RebootPrompt="no"
                       Property="IERunning"
                       Target="iexplore.exe"/>
<util:CloseApplication Id="CloseChrome" CloseMessage="no"
                       Description="Chrome is still running."
                       ElevatedCloseMessage="no"
                       RebootPrompt="no"
                       Property="ChromeRunning"
                       Target="chrome.exe"/>
<util:CloseApplication Id="CloseFirefox" CloseMessage="no"
                       Description="Firefox is still running."
                       ElevatedCloseMessage="no"
                       RebootPrompt="no"
                       Property="FirefoxRunning"
                       Target="firefox.exe"/>

更新 从日志中,似乎发生了一些事情,但没有关闭也没有提示。下面的日志发生了两次(正如我所料),一次在 AppSearch 之前,一次在 InstallValidate 之前,但从来没有调用 FileInUse 对话框。我尝试将 WixUI_InstallDir 更改为 Mondo,但这没有帮助。

Action 22:28:12: WixCloseApplications. 
Action start 22:28:12: WixCloseApplications.
WixCloseApplications:  Entering WixCloseApplications in C:\Users\tim\AppData\Local\Temp\MSIC78D.tmp, version 3.6.2809.0
WixCloseApplications:  Checking App: iexplore.exe 
WixCloseApplications:  App: iexplore.exe found running, 2 processes, setting 'IERunning' property.
WixCloseApplications:  Checking App: chrome.exe 
WixCloseApplications:  App: chrome.exe found running, 7 processes, setting 'ChromeRunning' property.
WixCloseApplications:  Checking App: firefox.exe 
Action ended 22:28:13: WixCloseApplications. Return value 1.

【问题讨论】:

WixCloseApplications 的其他选项包括运行它 Before=LaunchConditions 然后设置一个不是 RunningIE 的条件(例如)。如果您未设置 WixCloseApplications 自定义操作,它将在 InstallFiles 之前发生。但是,仍然没有触发 FilesInUse。帮助! 【参考方案1】:

在把同样的问题搞砸了一段时间之后,我想我可以说你不能那样解决它

你看,问题是只有 Win7 和 Vista 有重启管理器,可以让你检测正在运行的程序,只有那些使用你的文件的程序。这就是 FilesInUse 对话框的用途。您现在可能已经意识到,如果没有安装这些文件,它们就无法使用,所以就是这样:您无法按照您尝试的方式解决它。事实上,您在 WinXP 中根本没有重新启动管理器

我找到的其他解决方案是:

继续您开始的方式,但使用大量自定义操作创建您自己的对话框 在 C/C++ 中创建您的自定义操作 Dll,它可以检查正在运行的进程并向 MSI 发出信号以显示 FilesInUse 对话框。 (您必须了解如何制作自定义操作 Dll,但我建议您使用此解决方案)

如果您还没有解决它,希望这对您有所帮助。

【讨论】:

【参考方案2】:

旧问题的新答案。愿它帮助某人。这里是:

在这种情况下ClosePromtCA 应该可以很好地工作。它只是强制用户关闭指定的进程——在上面的例子中 chrome.exe、firefox.exe... 此外,自定义操作是开源的,因此应该很容易根据您的需要进行调整。

【讨论】:

以上是关于Wix:如何使用 FileInUse 对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wix 屏幕/对话框之间插入 C# CA 屏幕/表单

WiX - 如何在文件浏览对话框后刷新编辑控件

如何使用 WiX 和 MSI 进行静默安装和卸载?

如何使 ExePackage 的 Wix DetectCondition 始终为真?

如何在关闭对话框的 Wix 安装程序中停止自定义操作中的进度条

如何在 Wix 安装程序中隐藏标题栏?