продолжить, если служба не запускается

Я устанавливаю службу Windows (на самом деле их несколько), и это фрагмент одной из них:

<Component Id="cmpD9168A36C32F8D411B6EF4270EE6544F" Guid="{E5811AB8-0949-4C75-99BD-6687EB4672D4}" Win64="yes">
          <File Id="filD9168A36C32F8D411B6EF4270EE6544F" KeyPath="yes" Source="$(var.LoggerService.ProjectDir)\bin\LoggerService.exe" />
          <ServiceInstall
              Id="loggerServiceInstaller"
              Type="ownProcess"
              Vital="yes"
              Name="$(var.Manufacturer)LoggerService"
              DisplayName="$(var.Manufacturer)LoggerService"
              Start="auto"
              Account="[PROP_DOMAINUSER]"
              Password="[PROP_PASSWORD]"
              ErrorControl="ignore"
              Interactive="no">
            <ServiceDependency Id="LanmanWorkstation"/>
            <ServiceDependency Id="LanmanServer"/>
          </ServiceInstall>
          <ServiceControl Id="loggerStartService" Start="install"  Stop="both" Remove="uninstall" Name="$(var.Manufacturer)LoggerService" Wait="yes" />
        </Component>

Теперь во время установки служба попытается запуститься, но по замыслу может не получиться, и это нормально. Но теперь, когда служба не работает, она спрашивает, хочу ли я отменить или повторить попытку. Как я могу просто игнорировать неудачу?


person eddyuk    schedule 13.02.2013    source источник
comment
Вы пытались установить для ServiceControl@Wait значение «Нет»?   -  person Christopher Painter    schedule 13.02.2013


Ответы (1)


Обычно это проблема с дизайном сервиса. Например, я отвечал на вопросы на StackOverflow, где разработчики говорят, что их служба вызывает веб-службу во время запуска, и это занимает больше времени, чем 30 секунд, разрешенных MSI для запуска. Мой ответ всегда "правда??".

Это плохой дизайн. OnStart() службы не должен делать ничего, кроме запуска фонового рабочего потока и сообщения об успехе. Затем этот поток должен инициализировать и обрабатывать работу. Конвейер для OnStart должен иметь минимальную зависимость и минимальное время выполнения.

person Christopher Painter    schedule 13.02.2013
comment
Увы, немногие сервисы следуют этому совету. Даже некоторые из тех, которые поставляются с Windows по умолчанию, этого не делают. - person Nik Bougalis; 14.02.2013
comment
К сожалению, согласен. В бывшей компании я зубами и когтями боролся с разработчиком, который хотел изменить значение реестра, чтобы настроить SCM на более длительное ожидание запуска службы. Я утверждал, что это было неуместным изменением машины клиентов, и вынудил их провести рефакторинг своего кода. Пару лет спустя я устанавливал продукт Microsoft (я думаю, TFS) ... кто-нибудь хочет догадаться, что этот установщик сообщил мне, что ему нужно было сделать? - person Christopher Painter; 14.02.2013