WIX C ++ إجراء مخصص
-
22-09-2019 - |
سؤال
لديّ عمل مخصص لـ 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.
لا تنتمي إلى StackOverflow