Служба Windows не останавливается и не удаляется при удалении (Wix)

Я видел несколько связанных вопросов о stackoverflow, которые относятся к этому, но ни один из них, похоже, не касается конкретного поведения, которое я наблюдаю.

У меня есть служба Windows, определенная следующим образом в файле Wix 3.0 .wxs.

<Component Id='Service' Guid='3c658a54-b236-11e0-bbf6-039615e482ae' >

    <File Id='ServiceEXE' Name='m_agent_service.exe'
          Vital='yes' Source='..\m_agent_service.exe'
          KeyPath='yes' />

    <ServiceInstall Id='MerakiServiceInstall'
        Vital='yes'
        Name='MerakiPCCAgent' DisplayName='Meraki Client Insight Agent $(env.VERSION)' Description="Meraki Client Insight Monitoring and Management Service"
        Type='ownProcess' Interactive='no' Start='auto' ErrorControl='normal'>
    </ServiceInstall>

    <ServiceControl Id='MerakiServiceControl'
        Name='MerakiPCCAgent'
        Start='install' Stop='both' Remove='uninstall'
        Wait='yes' />
</Component>

Когда я устанавливаю .MSI, служба устанавливается и работает. Отлично.

Когда я затем удаляю (либо запуская msiexec /x, либо используя «Установка и удаление программ» на панели управления), служба продолжает работать и не удаляется. Фактически, журнал самой службы говорит мне, что ни один из кодов завершения работы службы не был вызван. (Например, когда я использую "sc stop", я действительно вижу, что код завершения работы службы работает корректно.)

Вот некоторые важные части из журнала удаления msiexec /x:

MSI (s) (14:04) [11:33:54:692]: 1 application(s) had been reported to have files
 in use.
Info 1603. The file C:\Program Files\Meraki\PCC Agent 1.0.67\m_agent_service.exe
 is being held in use by the following process: Name: m_agent_service, Id: 3120,
 Window Title: '(not determined yet)'.  Close that application and retry.
MSI (c) (40:78) [11:33:54:692]: File In Use: -m_agent_service- Window could not
be found. Process ID: 3120
MSI (c) (40:78) [11:33:54:692]: No window with title could be found for FilesInUse

[...]

Action start 11:33:57: UnpublishFeatures.
MSI (s) (14:04) [11:33:57:379]: Doing action: StopServices
MSI (s) (14:04) [11:33:57:379]: Note: 1: 2205 2:  3: ActionText
Action ended 11:33:57: UnpublishFeatures. Return value 1.
Action start 11:33:57: StopServices.
MSI (s) (14:04) [11:33:57:379]: Doing action: DeleteServices
MSI (s) (14:04) [11:33:57:379]: Note: 1: 2205 2:  3: ActionText
Action ended 11:33:57: StopServices. Return value 1.
Action start 11:33:57: DeleteServices.
MSI (s) (14:04) [11:33:57:379]: Doing action: RemoveFiles

[...]

MSI (s) (14:04) [11:33:57:645]: Product: Meraki Client Insight Agent -- Removal
completed successfully.

MSI (s) (14:04) [11:33:57:645]: Windows Installer removed the product. Product N
ame: Meraki Client Insight Agent. Product Version: 1.0.67. Product Language: 103
3. Removal success or error status: 0.

person Thomer Gil    schedule 19.07.2011    source источник
comment
Зависит ли создаваемая вами служба от каких-то других файлов или сборок? Если это так, вам нужно получить идентификатор процесса службы, а затем убить процесс. затем вы можете удалить службу   -  person Sunil Agarwal    schedule 01.08.2011


Ответы (2)


Боже мой, пока я был в туалете, у меня случилась мозговая волна, и я думаю, что все-таки исправил ее сам — извините за пост! Я думаю, что объясню, что это исправило, на случай, если другие новички, использующие ту же книгу Wix, что и я, столкнутся с той же проблемой.

По сути, я изменил Guid на своем компоненте, переустановил, удалил, и все снова заработало. (Я принимаю к сведению, что изменение Guids может быть не лучшей практикой, но это сработало для меня.)

Чтобы уточнить, я думаю, что на самом деле не было никаких проблем с моим установщиком — проблема была на ПК, который я использовал для тестирования установки. Моя первая попытка установить эту службу Windows была сделана без элемента ServiceControl, только с элементом ServiceInstall. Затем я протестировал установку, и она сработала, но служба, очевидно, не удалила себя при удалении. Затем я вручную остановил и удалил службу со своего ПК с помощью Services.msc.

Затем я прочитал следующий раздел своей книги, понял, что мне также нужен элемент ServiceControl, создал его и повторно попробовал установщик, но я использовал тот же Guid. Удаление по-прежнему не работало правильно, и я предположил, что сделал что-то не так в своем установщике, отсюда и сообщение выше.

Я предполагаю, что предыдущая установка с использованием того же Guid, но без элемента ServiceControl, каким-то образом привела к повреждению моего ПК и помешала правильному завершению нового деинсталлятора.

Пусть это будет для меня уроком — никогда не тестируйте свой установщик на своем ПК! Одно из тех правил, которые я полностью понимаю и с радостью игнорирую, пока оно не укусит меня :)

person RichWildUK    schedule 30.08.2012
comment
То же самое здесь, попробуйте это, если у вас возникла эта проблема! - person joepetrakovich; 08.07.2014

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

person Rob Mensching    schedule 25.07.2011