2017-05-31 3 views
0

私はWixを初めて使っています。 msiをインストールする際に、util:CloseApplicationを使用して、notepad.exeが実行されているかどうかを検出したいと考えています。私の簡単なコード。WixCloseApplicationsを修正する方法:エラー0x8007064f:データベース上でビューを開くことができませんでしたか?

<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ログファイル:(タイムスタンプが剥がさ)

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. 
+0

忘れました。私はtaskkillやWixQuietExecのようなものを使いたくない。私はexeを殺したくありません。ユーザーに知らせてから、インストールを終了するだけです。たとえCloseMessage = "yes"であっても。同じ結果。 –

答えて

0

私は私が経験した問題の根本的な原因を発見したと思います。 完全な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

ソリューションを知らせる奇妙なログエントリ見た:外の世界への参照を持っている<Product><\Product>または他の既存の<Fragment>内部<util:CloseApplicationフラグメントのコードを移動することにより を。たとえば、Directory Id=などは問題を解決します。

<util:CloseApplication参照(私が気づいていない)を含める方法がない限り、<util:CloseApplicationコードをそれ自身のフラグメントに入れないでください!

関連する問題