Можно ли получить доступ к строкам из файла локализации .wxl из настраиваемого действия с WiX?

У меня есть следующая разметка WiX, которая инструктирует установщик MSI вызывать пользовательское действие из включенной DLL:

<CustomAction Id="CA_SetProperties_Finalize"Property="CA_OnInstallFinalize"Value="[Installed],[REINSTALL],[UPGRADINGPRODUCTCODE],[REMOVE]" />

<CustomAction Id='CA_OnInstallFinalize'
BinaryKey='CADll'
DllEntry='msiOnInstallFinalize'
Execute='deferred' Impersonate='no' />

<InstallExecuteSequence>
<Custom Action='CA_SetProperties_Finalize'
Before='InstallFinalize'></Custom>
<Custom Action='CA_OnInstallFinalize'
After='CA_SetProperties_Finalize'></Custom>
</InstallExecuteSequence>

<Binary Id='CADll' SourceFile='Sources\ca-installer.dll' />

И сама DLL имеет следующий код C ++ для настраиваемого действия:

#pragma comment(linker, "/EXPORT:msiOnInstallFinalize=_msiOnInstallFinalize@4")

extern "C" UINT __stdcall msiOnInstallFinalize(MSIHANDLE hInstall)
{
//Do the work
if(doWork(hInstall) == FALSE)
{
//Error, cannot continue, display end-user message...
PMSIHANDLE hRecord = MsiCreateRecord(0);
MsiRecordSetString(hRecord, 0, TEXT("Error cannot continue!"));
MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_ERROR + MB_OK), hRecord);

return ERROR_INSTALL_FAILURE;
}

return ERROR_SUCCESS;
}

Как видите, сообщение конечного пользователя жестко запрограммировано. В моей фактической разметке WiX я использую файл локализации .wxl для строк как таковой:

<Property Id="ARPCONTACT" Value="!(loc.ContactInfo)" Secure="yes" />

А потом, например, lang_en-us.wxl файл будет:

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ContactInfo">To get hold of me yell out of the window...</String>
</WixLocalization>

Поэтому мне было любопытно, есть ли способ получить доступ к этим строкам локализации из файла .wxl в моем коде настраиваемых действий C ++?

0

Решение

Вы можете получить доступ к базе данных и таблицам сеансов Windows Installer из своего пользовательского действия. Общей таблицей для доступа является таблица свойств.

Как вы знаете, WiX будет создавать таблицы базы данных с локализованными значениями для каждой культуры, для которой он создает .msi. Так что да, к строкам локализации можно получить доступ, например, как к значениям свойств.

(Но нет, пользовательское действие не может читать их напрямую из файла .wxl, если вы не используете .wxl по-другому. Файлы .wxl в вашем проекте обычно не включаются в установщик, за исключением отдельных локализованных ссылок на строковые ссылки. )

Другими словами, вы, вероятно, обдумываете это. Просто установите и используйте свойства с локализованными значениями.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]