Question

J'ai une action personnalisée WIX de base:

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

Ajouté au programme d'installation:

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

Le problème est que, peu importe ce que je fais, la hInstaller poignée est pas valide. J'ai mis l'action à engager, différé, a changé le lieu en séquence InstallExecute, hInstaller est toujours pas valide.

Toute aide serait appréciée. Merci.

Était-ce utile?

La solution

Vous devez exporter la fonction appelée si MSI peut l'appeler en utilisant le nom de style undecorated C

Remplacez votre code avec cette

    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;
    }

Autres conseils

Comme indiqué , la seule façon de surmonter la mutiler d'un __stdcall est d'utiliser:

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

Cela crée une deuxième entrée dans la table d'exportation de DLL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top