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