I am new to Wix. While installing a msi, I would like to use the util:CloseApplication
to detect if notepad.exe is running. My simple code.
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<util:CloseApplication CloseMessage="no" Target="notepad.exe" RebootPrompt="no"/>
<InstallExecuteSequence>
<Custom Action="WixCloseApplications" After="InstallInitialize"/>
</InstallExecuteSequence>
Failed to in both Wix 3.10 and 3.11 toolsets. Any suggestion?
Have also tried to execute the WixCloseApplications Before="InstallValidate"
. Same result.
MSI LogFile: (time stamp stripped off)
MSI (s) (6C:90) [10:47:42:356]: Doing action: WixCloseApplications
Action 10:47:42: WixCloseApplications.
Action start 10:47:42: WixCloseApplications.
MSI (s) Creating MSIHANDLE (1) of type 790542 for thread 60816
MSI (s) Invoking remote custom action. DLL: C:\Windows\Installer\MSI95B2.tmp, Entrypoint: WixCloseApplications
MSI (s) Generating random cookie.
MSI (s) Created Custom Action Server with PID 57776 (0xE1B0).
MSI (s) Running as a service.
MSI (s) Hello, I'm your 32bit Impersonated custom action server.
MSI (s) Creating MSIHANDLE (2) of type 790541 for thread 60964
MSI (s) Note: 1: 2205 2: 3: WixCloseApplication
MSI (s) Note: 1: 2228 2: 3: WixCloseApplication 4: SELECT `WixCloseApplication`, `Target`, `Description`, `Condition`, `Attributes`, `Property`, `TerminateExitCode`, `Timeout` FROM `WixCloseApplication` ORDER BY `Sequence`
MSI (s) Creating MSIHANDLE (3) of type 790531 for thread 60964
WixCloseApplications: Error 0x8007064f: failed to open view on database
MSI (s) Closing MSIHANDLE (3) of type 790531 for thread 60964
MSI (s) Creating MSIHANDLE (4) of type 790531 for thread 60964
WixCloseApplications: Error 0x8007064f: failed to open view on WixCloseApplication table
MSI (s) Closing MSIHANDLE (4) of type 790531 for thread 60964
MSI (s) Closing MSIHANDLE (2) of type 790541 for thread 60964
CustomAction WixCloseApplications returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
MSI (s) Closing MSIHANDLE (1) of type 790542 for thread 60816
Action ended 10:47:42: WixCloseApplications. Return value 3.
MSI (s) Machine policy value 'DisableRollback' is 0
MSI (s) Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) Calling SRSetRestorePoint API. dwRestorePtType: 13, dwEventType: 103, llSequenceNumber: 958, szDescription: "".
MSI (s) The call to SRSetRestorePoint API succeeded. Returned status: 0.
MSI (s) Unlocking Server
Action ended 10:47:42: INSTALL. Return value 3.
I think I have found out the root cause of the problem I experienced.
If I put the complete ClosApplication codes inside a <Fragment></Fragment>
, the whole fragment of code is skipped (simply due to lack of reference).
<Fragment>
<util:CloseApplication ID="StopNotepad" CloseMessage="no" Target="notepad.exe" RebootPrompt="no"/>
<InstallExecuteSequence>
<Custom Action="WixCloseApplications" After="InstallInitialize"/>
</InstallExecuteSequence>
</Fragment>
The problem I saw earlier was slightly different. My fragment just contain this
<Fragment>
<util:CloseApplication ID="StopNotepad" CloseMessage="no" Target="notepad.exe" RebootPrompt="no"/>
</Fragment>
The required custom action was included via an external wxi file. The final msi contains the call to custom action but missing the Util:CloseApplication
declaration. As a result, the msi failed to deploy and I saw the weird log entry stating WixCloseApplications: Error 0x8007064f: failed to open view on database
Solution:
By moving the <util:CloseApplication
fragment code inside the <Product><\Product>
or other existing <Fragment>
that has a reference to the outside world. For example, Directory Id=
etc will resolve the problem.
Unless there is a way to include <util:CloseApplication
reference (that I am not aware of), don't put the <util:CloseApplication
code in its own fragment!
User contributions licensed under CC BY-SA 3.0