سؤال

لديّ عمل مخصص لـ WIX:

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

يضاف إلى المثبت:

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

المشكلة هي أنه ، بغض النظر عن ما أقوم به ، فإن Hinstaller المقبض غير صالح. لقد قمت بتعيين الإجراء للالتزام ، المؤجل ، بتغيير المكان في تسلسل Installexecute ، Hinstaller دائمًا غير صالح.

سيكون موضع تقدير أي مساعدة. شكرًا.

هل كانت مفيدة؟

المحلول

تحتاج إلى تصدير الوظيفة المسمى حتى تتمكن MSI من تسميتها باستخدام اسم نمط C غير المزيّف

استبدل الرمز الخاص بك بهذا

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

نصائح أخرى

كما ذكر هنا, ، الطريقة الوحيدة للتغلب على مشاحنات أ __stdcall هو الاستخدام:

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

هذا يخلق إدخالًا ثانيًا في جدول تصدير DLL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top