WiX: удаление не останавливает и не удаляет мой сервис Windows - PullRequest
3 голосов
/ 27 января 2012

Я новичок в WiX, но в прошлом я кое-что делал с Installshield и установщиком Windows.

У меня есть довольно простой установщик, который настраивает службу Windows. Он настраивается в разделе «NT AUTHORITY \ NETWORK SERVICE», если это имеет значение.

Установка работает нормально, но во время удаления я получаю сообщение об этом: «Программа установки должна обновить файлы или службы, которые не могут быть обновлены во время работы системы. Если вы решите продолжить, для завершения установки потребуется перезагрузка . ". Если я нажимаю, все удаляется, кроме службы (даже после перезагрузки). Это все еще запущено, и exe, связанный со службой, также оставлен позади.

Я могу вручную остановить и удалить службу без проблем с помощью команды sc.exe.

Также, если у меня была остановлена ​​служба вручную перед запуском удаления, я не получаю вышеупомянутую подсказку, но результат остается тем же. Служба оставлена ​​и файл тоже.

Вот часть моего Wix:

<Component Id='cmpService' Guid='{542f970e-ca39-4501-aae4-9e03eaac9a25}' >
    <File Id='ServiceExeFile' Name='nls.service.agent.exe'
            ReadOnly='no' Compressed='yes' KeyPath='yes' Vital='yes' Hidden='no' System='no'
            Checksum='no'  />
    <ServiceInstall Id='MyServiceInstall' DisplayName='RaMP Data Collector' Name='rampDataCollector'
            ErrorControl='normal' Start='auto' Type='ownProcess' Vital='yes'
            Account='NT AUTHORITY\NETWORK SERVICE' />
    <ServiceControl Id='MyServiceControl' Name='rampDataCollector'  
            Start='install' Stop='uninstall' Remove='uninstall' Wait='yes' />
</Component>

Я пытался

  • Сняв аккаунт = 'NT AUTHORITY \ NETWORK SERVICE' и получив тот же результат
  • Изменяя все мои направляющие, просто будьте уверены и получите тот же результат.
  • Посмотрите подробный журнал для обоих сценариев (служба работает перед удалением и остановлена ​​перед удалением), но я не увидел ничего интересного, что можно было бы расшифровать.

Вот фрагменты из журнала MSI, когда я запускаю деинсталляцию, и служба сначала останавливается вручную. Я вставил части вокруг сервисного компонента и действий MSI.

MSI (s) (A4:58) [10:44:11:080]: Component: cmpService; Installed: Local;   Request: Absent;   Action: Null
MSI (s) (A4:58) [10:44:11:080]: Component: cmpFolderPermissions; Installed: Local;   Request: Absent;   Action: Absent
MSI (s) (A4:58) [10:44:11:080]: Component: cmpApplicationShortcut; Installed: Local;   Request: Absent;   Action: Absent

И

MSI (s) (A4:58) [10:44:11:876]: Doing action: StopServices
Action ended 10:44:11: SchedSecureObjectsRollback. Return value 1.
Action start 10:44:11: StopServices.
MSI (s) (A4:58) [10:44:11:878]: Doing action: DeleteServices
Action ended 10:44:11: StopServices. Return value 1.
Action start 10:44:11: DeleteServices.
MSI (s) (A4:58) [10:44:11:879]: Doing action: RemoveRegistryValues
Action ended 10:44:11: DeleteServices. Return value 1.

Буду признателен за любую помощь.

Полагаю, в качестве последнего средства я мог бы выполнить пользовательское действие и остановить / удалить службу при удалении с помощью команды sc.

1 Ответ

2 голосов
/ 28 января 2012

Вы должны понимать, что служебные команды возникают не при удалении установщика, а при удалении компонента. Как говорится в журнале, никаких действий не предпринимается.

Это может произойти, если вы делаете что-то, например, нарушаете правила компонента или обслуживаете приложение за пределами установщика и путаете счетчик ссылок на компонент / файл.

Например, если существует файл foo.exe, а затем MSI установит файл foo.exe, он останется при удалении. Поэтому служба, связанная с этим, также будет.

...