How to fix WixCloseApplications: Error 0x8007064f: failed to open view on database?

0

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.
windows-7
wix
wix3
wix3.10
asked on Stack Overflow May 31, 2017 by Green Wix • edited Jun 1, 2017 by Green Wix

1 Answer

0

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!

answered on Stack Overflow Jun 8, 2017 by Green Wix

User contributions licensed under CC BY-SA 3.0