Wix: регистрация и запуск службы Windows - PullRequest
1 голос
/ 09 декабря 2011

У меня есть ситуация, когда меня попросили повторно внедрить установщик InstallShield в Wix. Я испытываю трудности с примерами в Интернете, пытаясь реализовать точное поведение. Что мне нужно сделать, это следующее:

Когда пользователь нажимает кнопку «Установить» на VerifyReadyDlg (я использую Mondo) и появляется ProgressDlg:

  • Вызов .exe в месте установки (если существует из предыдущей установки)
  • Остановить службу в месте установки (если существует из предыдущей установки)
  • Отменить регистрацию указанной службы (если она существует после предыдущей установки)
  • Копирование файлов из MSI, включая копию службы .exe для установки
  • Считывание данных из некоторых элементов управления Edit в предыдущем диалоговом окне и запись данных в некоторые из скопированных XML-файлов конфигурации, которые сейчас находятся в месте установки.
  • Зарегистрировать услугу еще раз

При нажатии кнопки Готово в самом последнем диалоговом окне (ExitDlg) мне нужно:

  • Запустить сервис заново
  • Вызовите .exe (отличный от первого) в месте установки

Я могу копировать файлы и записывать данные в некоторые из файлов после того, как они были скопированы ... хотя Wix просто делает это ... Я не говорю, когда идти и делать это. Проблема в том, что мне нужно запланировать первый вызов .exe, остановку службы и отмену регистрации до начала действия «Копировать», и я могу только зарегистрироваться снова ПОСЛЕ обновления XML-файлов конфигурации.

Я пытался использовать элементы InstallExecuteSequence и ServiceInstall и связывал их вместе с CustomActions, но это не сближается, и я думаю, что я совершенно неправильно подхожу к этому ... не стоит публиковать то, что я сделал.

Как мне это сделать? Это общий шаблон, который я видел в скриптах InstallSheild, но я не могу найти ни одного примера Wix, выполняющего эту последовательность.

Спасибо огромное за любую помощь по этому вопросу. Майкл.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Вы можете использовать пользовательское действие, которое вы определили в C #, из проекта, который вы создаете и который выводит в файл DLL:

public static class CustomActions
{
    [CustomAction]
    public static ActionResult DoSomething(Session session) {
       // Put C# code here that does what you describe, such as run an exe 
       // from the command prompt.
       return ActionResult.Success;
    }
}

Импортируйте эту DLL в ваш установщик Wix:

<!-- The custom action DLL itself.-->
<Binary Id="WebAppCA" SourceFile="$(var.SolutionDir)..\WebAppInstallCustomActions\bin\Debug\WebAppInstallCustomActions.CA.dll" />

<!-- The custom action that does something that you can use. -->
<CustomAction Id="DoSomething"
                  BinaryKey="WebAppCA"
                  DllEntry="DoSomething"
                  Execute="immediate"
                  Return="check" />

Если вы хотите получить полное решение, посмотрите эту ветку в блоге Джона Роббинса ( ссылка ) ... у него есть установщик Wix, который устанавливает сайт IIS, но при запуске он использует Пользовательское действие, определенное в C # для перечисления списка веб-сайтов.

0 голосов
/ 10 декабря 2011

Вы можете контролировать, когда ваши действия запланированы, используя Before или After атрибуты Пользовательский элемент или элементы для стандартных действий.

Выполняется ли текущая установка с MSI? Если да, вы можете выполнить обновление установки и расписание RemoveExistingProducts после копирования существующей конфигурации, но до выполнения других действий по установке. Таким образом, предыдущий пакет будет удален с собственной логикой удаления, а затем вы сможете установить обновленный пакет.

Чтобы сохранить конфигурацию из предыдущей версии, необходимо выполнить действие до выполнения RemoveExistingProducts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...