Я новичок в 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.