Я настраиваю проект для работы под сервером интеграции teamcity на сервере Windows 2003 (с пакетом обновления 2). Интеграционные тесты запускаются с использованием msbuild с последней версией msbuildtasks v1.2.0.306. Весь код построен с использованием .net 2.0.
В нашем файле build.xml мы удаляем все службы, используемые системами, перестраиваем их все заново, воссоздаем их, а затем запускаем кучу тестов nunit, чтобы убедиться, что они хорошо работают вместе.
Чтобы удалить службы, мы используем задачу UninstallAssembly следующим образом:
Когда я смотрю на вывод сборки, запускается команда installUtil:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ InstallUtil. exe / uninstall .. \ src \ FolderName \ ProjectName \ bin \ Debug \ ProjectName.exe
Затем мы переустанавливаем службу с помощью задачи InstallAssembly:
это часто нормально, но иногда мы получаем такую ошибку:
ошибка MSB6006: "
[SC] DeleteService FAILED 1072:
Указанная служба была отмечена для удаления.
Когда служба находится в состоянии «помечена для удаления», есть ли способ избавиться от нее?
Я нашел эту заметку от Microsoft, в которой говорится, что необходимо перезагрузить компьютер, это работает, но мы действительно не хотим перезапускать наш сервер интеграционного тестирования между сборками.
редактировать:
Эта проблема, похоже, возникает, когда при предыдущем запуске служба не запускалась. например. где мы получаем ошибку:
Служба ServiceName запускается ...
f: \ TeamCityUser \ Checkout \ trunk \ dev \ build.xml (187, 5): не удается запустить службу ServiceName на компьютере «ИМЯ КОМПЬЮТЕРА».
Похоже, что после неудачного запуска службы мы не можем удалить службу до перезагрузки. Я считаю, что в этом случае причина того, что служба не запускалась, заключалась в том, что конструктор основного класса службы выдал исключение
FileNotFoundException
. Класс является производным от ServiceBase .Я все еще хотел бы знать, как удалить службу без перезагрузки.