Wix Dilemma - это вообще возможно? - PullRequest
0 голосов
/ 02 августа 2011

Моя цель:

Чтобы создать установщик WiX, который может останавливать службы перед установкой своих файлов, установите файлы и перезапустите остановленные службы

Проблема

Имена служб могут отличаться при каждом запуске установщика, но они всегда будут иметь префикс (prefix | servicename-servername), например,

coServSamSs-сервер1 и coServSpooler-сервер1

coServSamSs-otherserver2 и coServSpooler-otherserver2.

Я могу только думать, что запуск сценария powershell из установщика для запуска / остановки этих служб будет наиболее жизнеспособным вариантом, но следующая проблема заключается в том, что я хотел бы включить такие сценарии powershell в msi, поэтому возможно до

  1. установить скрипт перед любыми другими файлами и затем запустить его, чтобы остановить службы
  2. установить остальные файлы
  3. снова запустить скрипт для перезапуска служб

Я знаю, что есть специальные действия для запуска сценария powershell, хотя мне не повезло (см. Wix - установите и запустите сценарий powershell )

Предложения, пожалуйста? Возможно ли то, что я пытаюсь сделать?

Заранее спасибо

1 Ответ

2 голосов
/ 02 августа 2011

Вы можете использовать настраиваемые действия с командой windows, чтобы остановить определенные службы

<CustomAction Id="A_StopService" Directory="INSTALDIR" ExeCommand='NET STOP "[SERVICENAME]"' Execute="immediate" Return='ignore'></CustomAction>

И, как вы сказали, у вас есть несколько служб, вы можете вызвать настраиваемое действие, написанное на C # или другом языке.Получите список служб с нужным префиксом, а затем внутри цикла

ServiceController controller = new ServiceController(servicename);

try
{
    if (controller.Status == ServiceControllerStatus.Running | controller.Status == ServiceControllerStatus.Paused)
    {
        controller.Stop();

        controller.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 0, 12));

        controller.Close();
    }
}
catch (Exception ex)
{
    //Some message
}

Таким образом остановите все службы, и после выполнения задач перезапустите службы.

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