У меня есть DLL из старого установщика WiSE, что я пытаюсь получить работу в WiX, таким образом, я вполне уверен работы DLL с основанными на MSI установщиками.
Вот мое определение:
<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />
и использование:
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>
Моя функция C++ похожа на это:
extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)
Куда точно я могу передать в параметрах?
Вы не можете передавать параметры напрямую, потому что для того, чтобы это работало, ваша функция должна быть экспортирована с точно правильным размером. Когда вы вызываете readConfigFiles
в своей dll с настраиваемым действием, он должен иметь следующий размер:
extern "C" UINT __stdcall readConfigFiles(MSIHANDLE hInstaller);
Вы можете использовать параметр hInstaller
для чтения свойств из MSI. Используйте MsiGetProperty ()
:
HRESULT GetProperty(MSIHANDLE hInstaller, LPCWSTR property, LPWSTR value, DWORD cch_value) {
UINT err = MsiGetProperty(hInstaller, property, value, &cch_value);
return (err == ERROR_SUCCESS ? S_OK : E_FAIL);
}
Затем просто убедитесь, что вы установили свойство в своем файле .wxs:
<Property Id="YOUR-PROPERTY-NAME">your-property-value</Property>