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