Служба Windows не останавливается и не удаляется при удалении (Wix) - PullRequest
6 голосов
/ 19 июля 2011

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

У меня есть служба 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.

Ответы [ 2 ]

6 голосов
/ 30 августа 2012

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

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

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

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

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

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

0 голосов
/ 25 июля 2011

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

...