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 屏幕/表单
如何使 ExePackage 的 Wix DetectCondition 始终为真?