1

安装应要求关闭所有浏览器: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.
4

2 回答 2

3

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

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

我发现的其他解决方案是:

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

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

于 2012-05-07T17:26:57.457 回答
0

老问题的新答案。愿它帮助某人。开始:

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

于 2015-03-24T15:14:33.770 回答