Frage

Ich habe eine grundlegende WIX benutzerdefinierte Aktion:

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

Zu dem Installateur:

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

Das Problem, dass, egal was ich tue, ist der Griff hInstaller nicht gültig. Ich habe habe die Aktion zu begehen, latente, den Ort in InstallExecute Reihenfolge geändert, hInstaller ist immer nicht gültig.

Jede mögliche Hilfe würde geschätzt. Danke.

War es hilfreich?

Lösung

Sie müssen die aufgerufenen Funktion exportieren, so MSI es mit undecorated C Artnamen anrufen

Ersetzen Sie den Code mit diesem

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

Andere Tipps

Wie bereits erwähnt hier , der einzige Weg, um die Verstümmelung eines zu überwinden __stdcall ist die Verwendung:

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

Dies erzeugt einen zweiten Eintrag in der DLL-Exporttabelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top