1

たとえば、含まれている DLL からカスタム アクションを呼び出すように MSI インストーラーに指示する次の WIX マークアップがあるとします。

<CustomAction Id="CA_SetProperties_Finalize" 
        Property="CA_OnInstallFinalize" 
           Value="[Installed],[REINSTALL],[UPGRADINGPRODUCTCODE],[REMOVE]" />

<CustomAction Id='CA_OnInstallFinalize' 
       BinaryKey='CADll' 
        DllEntry='msiOnInstallFinalize' 
         Execute='deferred' Impersonate='no' />

<InstallExecuteSequence>
  <Custom Action='CA_SetProperties_Finalize' 
          Before='InstallFinalize'></Custom>
  <Custom Action='CA_OnInstallFinalize' 
           After='CA_SetProperties_Finalize'></Custom>
</InstallExecuteSequence>

<Binary Id='CADll' SourceFile='Sources\ca-installer.dll' />

また、DLL 自体には、カスタム アクション用の次の C++ コードがあります。

#pragma comment(linker, "/EXPORT:msiOnInstallFinalize=_msiOnInstallFinalize@4")

extern "C" UINT __stdcall msiOnInstallFinalize(MSIHANDLE hInstall) 
{
    //Do the work
    if(doWork(hInstall) == FALSE)
    {
        //Error, cannot continue!
        return ERROR_INSTALL_FAILURE;
    }

    return ERROR_SUCCESS;
}

私のdoWork方法が失敗すると、インストールは続行されないので、戻りERROR_INSTALL_FAILUREます。問題は、その場合、インストーラーが単純に終了し、インストール GUI ウィンドウが消えることです。

カスタム アクションがエラーを返した場合にユーザー メッセージを表示できるように Wix マークアップを変更する方法はありますか?

4

3 に答える 3

2

そのコードを VB.NET に変換し、それをカスタム アクションで使用して、エラー時にポップアップを表示することができました。

.Net コードの見た目が大幅に異なる

Private Shared Sub DisplayMSIError(session As Session, msg As String)
  Dim r As New WindowsInstaller.Record(0)
  r.SetString(0, msg)
  session.Message(InstallMessage.Error, r)
End Sub

MSDNでもこれを見つけました.vbscriptを使用しています http://msdn.microsoft.com/en-us/library/xc8bz3y5(v=vs.80).aspx

于 2013-07-31T13:43:17.887 に答える