IniFileSearch с использованием WixSharp

Я новичок в обоих Wix и WixSharp. Недавно я изучил Wix и создал с ним базовый установщик. Одним из свойств, которые я использовал, было IniFileSearch, которое помогло мне найти значение в IniFile и использовать его, чтобы найти место установки для моих файлов. Я пытаюсь сделать то же самое с помощью WixSharp, но, похоже, не найти эквивалентный метод. Самая близкая вещь, которую я мог найти в WixSharp, - это класс AppSearch (под WixSharp.CommonTasks). Из Wix я знаю, что AppSearch - это таблица базы данных MSI, в которой хранятся задачи поиска. "IniFileSearch" является одним из таких поисков. Я даже не уверен, сопоставлен ли класс AppSearch в библиотеке WixSharp с таблицей базы данных MSI AppSearch. В любом случае, моя цель - найти эквивалентный метод IniFileSearch в библиотеке WixSharp. Если кто-нибудь знает это, пример будет отличным.

Вот пример IniFileSearch в разметке Wix

<Property Id="MY_PROPERTY">
 <IniFileSearch Id="myIniSearch"
                Name="myConfigFile.ini"
                Section="section1"
                Key="name"
                Type="raw" />
</Property>

1 ответ

Вот ответ, который я получил от создателя WixSharp Олега Шило.

Поскольку Wix# делает много разных вещей, такие задачи, как "свойство MSI IniFileSearch", практически не имеют отношения к истории Wix#. В любом случае, что касается Wix#, RegValueProperty - единственная задача MSI AppSearch, которую он поддерживает изначально. Вместо этого Wix# позволяет вам указать подпрограмму C#, в которой вы можете выполнять ЛЮБОЙ поиск / анализ без привязки к функциональности MSI.

Таким образом, в Managed CA вы можете прочитать свой reg-файл с помощью любого алгоритма C# по вашему выбору и просто обновить свойство сеанса по своему усмотрению:

public class CustomActions
{
    [CustomAction]
    public static ActionResult MyAction(Session session)
    {
        session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables(@"%windir%\win.ini"),
                                                       "System",
                                                       "Version");
    }
}

В приведенном выше коде я использовал подпрограмму поиска IniFileValue, которую Wix# уже реализует, но вы можете использовать любую альтернативную реализацию. Даже взаимодействие GetProfileString(...).

Если вы используете Managed Setup, вам нужно будет поместить действие в обработчик событий UIInitialized (или / и Load):

project.UIInitialized += project_UIInit;
...
static void project_UIInit(SetupEventArgs e)
{
    e.Session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables("%windir%\\config.ini"),
                                                     "System",
                                                     "Version") ?? "<unknown>"; 
}  

Просто помните, что IniFileValue был добавлен только недавно, поэтому в настоящее время вы можете получить его только из NuGet в виде предварительной версии пакета:

Install-Package WixSharp.bin -Version 1.0.26
Другие вопросы по тегам