У меня есть основное пользовательское действие 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;
}