Как исправить 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
код в своем фрагменте!