Как исправить WixCloseApplications: Ошибка 0x8007064f: не удалось открыть представление в базе данных?

Я новичок в Wix. При установке MSI, я хотел бы использовать util:CloseApplication определить, запущен ли notepad.exe Мой простой код

<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>

Не удалось в обоих наборах инструментов Wix 3.10 и 3.11. Любое предложение? Также пытались выполнить WixCloseApplications Before="InstallValidate", Тот же результат.

MSI LogFile: (метка времени удалена)

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.

1 ответ

Я думаю, что я выяснил причину проблемы, с которой столкнулся. Если я положу полные коды ClosApplication внутри <Fragment></Fragment>, весь фрагмент кода пропускается (просто из-за отсутствия ссылки).

<Fragment>
    <util:CloseApplication ID="StopNotepad" CloseMessage="no" Target="notepad.exe" RebootPrompt="no"/>

    <InstallExecuteSequence>
        <Custom Action="WixCloseApplications" After="InstallInitialize"/>
    </InstallExecuteSequence>
</Fragment>

Проблема, которую я видел ранее, была немного другой. Мой фрагмент просто содержит это

<Fragment>
    <util:CloseApplication ID="StopNotepad" CloseMessage="no" Target="notepad.exe" RebootPrompt="no"/>
</Fragment>

Требуемое настраиваемое действие было включено через внешний файл wxi. Последний msi содержит призыв к пользовательскому действию, но отсутствует Util:CloseApplication декларация. В результате MSI не удалось развернуть, и я увидел странную запись в журнале, заявляющую WixCloseApplications: Error 0x8007064f: failed to open view on database

Решение: перемещая <util:CloseApplication фрагмент кода внутри <Product><\Product> или другой существующий <Fragment> это имеет отношение к внешнему миру. Например, Directory Id=и т. д. решит проблему.

Если нет способа включить <util:CloseApplication ссылка (которую я не знаю), не ставьте <util:CloseApplication код в своем фрагменте!

Другие вопросы по тегам