2010-01-25 24 views
5

ho una base di azione WIX personalizzato:WIX C++ personalizzato Azione

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

Inserito nel 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 manico non è valido. Ho impostato l'azione su commit, posticipata, modificata la posizione nella sequenza InstallExecute, hInstaller non è sempre valido.

Qualsiasi aiuto sarebbe apprezzato. Grazie.

+0

In che modo non è valido? Stai ricevendo un errore di ritorno da una chiamata API? –

+0

Se si effettua una chiamata che utilizza l'handle, la funzione restituirà il messaggio di errore Invalid_Handle. –

+0

ignorando la maniglia, la funzione viene chiamata correttamente? – saschabeaumont

risposta

7

avete bisogno di 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; 
    } 
3

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

#pragma comment(linker, "/EXPORT:[email protected]@@23mangledstuff#@@@@")

Questo crea una seconda entr y nella tabella di esportazione DLL.

+2

Un altro modo per assicurare il nome della funzione non mutilato è incluso nelle esportazioni della DLL, è ESPORTARE in un file DEF e aggiungerlo alle proprietà del linker (Linker -> Input -> File di definizione del modulo). – Pierre

Problemi correlati