изменить свойства установщика в пользовательском действии C #

#c# #wix #windows-installer #custom-action

#c# #wix #windows-установщик #пользовательское действие

Вопрос:

Как изменить свойства установщика в моем пользовательском действии C #?

Ответ №1:

Чтобы получить доступ к свойству WiX, такому как те, которые заданы с помощью элемента Property, используйте индексатор объекта сеанса. Вот пример:

 [CustomAction]
public static ActionResult CustomAction1(Session session)
{
string myProperty = session["MY_PROPERTY"];
return ActionResult.Success;
}
  

Настройка свойств так же проста. Вы зададите значение, сославшись на ключ с помощью
имя вашего свойства. Вот пример:

 [CustomAction]
public static ActionResult CustomAction1(Session session)
{
session["MY_PROPERTY"] = "abc";
return ActionResult.Success;
}
  

Если свойство не существовало, когда вы его устанавливали, оно будет создано. Аналогичным образом, вы можете
очистите свойство, установив его значение равным null. Создание или изменение значений свойств
из пользовательского действия не мешает установщику отображать эти свойства в
журнал установки. Итак, если свойство содержит информацию, которая должна быть скрыта, вы
лучше сначала объявить его в вашей разметке WiX и установить его скрытый атрибут
на да.

 <Property Id="MY_PROPERTY" Hidden="yes" />
  

Комментарии:

1. Привет. Я получаю ошибку при установке значения свойства при запуске установщика без прав доступа, даже если пользовательское действие отложено и не является персональным. PS: Мне пришлось отложить это, поскольку я получаю доступ к API IIS.

Ответ №2:

Вы не можете. Только библиотеки DLL Win32 и немедленные действия VBScript имеют доступ на запись к свойствам установщика. Любой другой пользовательский тип действия может получать свойства только через свою командную строку или через CustomActionData.

Вот руководство по пользовательскому действию C DLL:http://www.codeproject.com/KB/install/msicustomaction.aspx

Для получения и настройки свойств установщика Windows вы можете использовать MsiGetProperty() и MsiSetProperty().

Комментарии:

1. Да, ответ хорошо продуман, но верен лишь частично. Классы установщика (из Visual Studio) не могут получить доступ к свойствам, поскольку нет маршалинга или удаленного управления дескриптором установщика. Однако более управляемые решения для пользовательских действий предоставляют доступ либо через абстракции, такие как Session[«свойство»], либо через прямой P / Invoke для дескриптора установщика.