Корректный способ удалить службу Windows?

У меня есть обслуживание окон, созданное использование C#, который установлен с помощью проекта установки VS2008, и имею несколько проблем, происходящих при процессе удаления:

Сервис не останавливается до удаления

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

(В настоящее время я должен обратиться к удалению его, вручную использование кв/см удаляет servicename).

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

protected override void OnBeforeUninstall(IDictionary savedState)
{
   base.OnBeforeUninstall(savedState);
   ServiceController serviceController = new ServiceController(MyInstaller.ServiceName);
   serviceController.Stop();
}

Когда этот код называют, и как я могу остановить сервис до удаления?

Папка Installation, не удаленная после удаления

Приложение также создает некоторые файлы в, он - папка установки при выполнении. После удаления папка установки (C:\Program Files\MyApp) не удалена и содержит файлы, созданные приложением, хотя все другие файлы, которые были на самом деле установлены установщиком, были удалены успешно.

Для процесса удаления действительно ли возможно удалить папку установки, включая все сгенерированные файлы в той папке, и если так, как?

Спасибо.

14
задан Mun 8 August 2010 в 05:05
поделиться

1 ответ

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

Это заставит ваш код ждать, пока служба не обработает сообщение «стоп», и завершит свою работу. После того, как служба фактически отключена, она больше не будет удерживать какие-либо дескрипторы файлов.

1
ответ дан 1 December 2019 в 16:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: