Как заставить System.Configuration.Install.Installer получить переменную из проекта установки? - PullRequest
7 голосов
/ 14 января 2010

У меня есть 2 проекта в моем решении

  1. Служба Windows

  2. Проект установки

Мне нужен метод ProjectInstaller : System.Configuration.Install.Installer, который называется OnAfterInstall, чтобы получить ProductName из проекта установки. Как мне это сделать?

1 Ответ

8 голосов
/ 15 января 2010

В проекте настройки щелкните правой кнопкой мыши проект и выберите «Просмотр»> «Пользовательские действия». Добавьте пользовательское действие. Теперь выберите «Добавить вывод», выберите проект веб-службы и нажмите «ОК».

Теперь выберите свое настраиваемое действие и задайте для свойства CustomActionData что-то вроде /ProductName=[PRODUCTNAME] /whateveryouwant=[Whateveryouwant] (обратите внимание, что это пары ключ-значение; т. Е. Для доступа к названию продукта, ProductName - это ключ, а значение - PRODUCTNAME).

Обратите внимание, что CustomActionData содержит параметры, которые будут переданы вашему классу установщика. PRODUCTNAME - это имя свойства, связанное с элементом управления вводом в диалоговом окне пользовательского интерфейса, и поэтому в вашем случае вы предложите пользователю ввести Имя продукта в программе установки. Таким образом, метка «Product Name» и соответствующее свойство должно быть установлено как PRODUCTNAME (очевидно, вы можете изменить это, но самое важное, что нужно отметить, это то, что имя свойства пользовательского интерфейса должно совпадать с именем свойства в CustomActionData) чтобы этот пример работал.

Теперь в вашем классе установщика вы можете получить название продукта, выполнив

public override void Install(IDictionary stateSaver)
{
      // If you need to debug this installer class, uncomment the line below
      //System.Diagnostics.Debugger.Break();

       string productName = Context.Parameters["ProductName"].Trim();

       string whateveryouwant = Context.Parameters["whateveryouwant"].Trim();
}

обратите внимание, я включил закомментированный код //System.Diagnostics.Debugger.Break();, который вы можете комментировать, чтобы вы могли отлаживать класс установщика.

надеюсь, это поможет.

...