Domanda

Ho un semplice azione WIX personalizzato:

        UINT __stdcall MyCustomAction(MSIHANDLE hInstaller)
        {   
            DWORD dwSize=0;
            MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize);
            return ERROR_SUCCESS;
        }

aggiunta al programma di installazione:

   <CustomAction Id="CustomActionId" FileKey="CustomDll" DllEntry="MyCustomAction"/>
   <InstallExecuteSequence>
       <Custom Action="CustomActionId" Before="InstallFinalize" />
   </InstallExecuteSequence>

Il problema è che, non importa quello che faccio, il hInstaller maniglia non è valido. Ho impostato l'azione di commettere, in differita, cambiato il luogo in sequenza InstallExecute, hInstaller non è sempre valido.

Qualsiasi aiuto sarebbe apprezzato. Grazie.

È stato utile?

Soluzione

È necessario esportare la funzione chiamata in modo da MSI può chiamare utilizzando undecorated C nome dello stile

Sostituire il codice con questo

    extern "C" _declspec(dllexport) UINT __stdcall MyCustomAction(MSIHANDLE hInstall);

    extern "C" UINT __stdcall MyCustomAction(MSIHANDLE hInstall)
    {   
        DWORD dwSize=0;
        MsiGetProperty(hInstaller, TEXT("MyProperty"), TEXT(""), &dwSize);
        return ERROR_SUCCESS;
    }

Altri suggerimenti

qui , l'unico modo per superare la storpiatura di un __stdcall è quello di utilizzare:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Questo crea una seconda voce nella tabella DLL di esportazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top