.net 使用msbuildtasks卸载程序集时,服务仅排队等待删除,服务器需要重新启动
我正在设置一个项目,在WindowsServer2003上的teamcity集成服务器下运行(使用sp2)。集成测试使用具有最新版本msbuildtasks v1.2.0.306的msbuild运行。所有代码都是使用.NET2.0构建的 在build.xml文件中,我们删除系统使用的所有服务,重新构建它们并重新创建它们,然后运行一系列nunit测试,以确保它们能够很好地协同工作 要删除服务,我们使用卸载程序集任务,如下所示:.net 使用msbuildtasks卸载程序集时,服务仅排队等待删除,服务器需要重新启动,.net,msbuild,service,continuous-integration,.net,Msbuild,Service,Continuous Integration,我正在设置一个项目,在WindowsServer2003上的teamcity集成服务器下运行(使用sp2)。集成测试使用具有最新版本msbuildtasks v1.2.0.306的msbuild运行。所有代码都是使用.NET2.0构建的 在build.xml文件中,我们删除系统使用的所有服务,重新构建它们并重新创建它们,然后运行一系列nunit测试,以确保它们能够很好地协同工作 要删除服务,我们使用卸载程序集任务,如下所示: <UninstallAssembly AssemblyFi
<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]删除服务失败1072:
已标记指定的服务
删除
当一个服务处于“标记为删除”状态时,有没有办法摆脱它
我从微软那里发现,重启计算机是可行的,但我们并不真的想重启构建之间的集成测试服务器
编辑:
此问题似乎发生在上次运行时服务无法启动。我们从哪里得到错误:
ServiceName服务正在启动
f:\TeamCityUser\Checkout\trunk\dev\build.xml(187,
5) :无法启动服务ServiceName
在计算机“COMPUTERNAME”上
因此,似乎是在启动服务失败之后,我们在重新启动之前无法删除该服务。我相信在这个例子中,服务没有启动的原因是因为主服务类的构造函数抛出了一个FileNotFoundException
。该类派生自
我仍然想知道如何在不重新启动的情况下删除服务。如中所示,您应该在卸载服务之前停止该服务。为此,您可以使用ServiceController
任务停止服务,并使用ServiceQuery
检查服务是否已停止
<PropertyGroup>
<ServiceName>Service</ServiceName>
</PropertyGroup>
<Target Name="StopService">
<ServiceController ServiceName="$(ServiceName)" Action="Stop" />
<CallTarget Targets="WaitStop"/>
</Target>
<Target Name="WaitStop">
<Sleep Milliseconds="1000" />
<ServiceQuery ServiceName="$(ServiceName)">
<Output TaskParameter="Status" PropertyName="ServiceStatus" />
</ServiceQuery>
<!-- If the service isn't stopped we execute WaitStop again -->
<MSBuild Condition="'$(ServiceStatus)' != 'Stopped'"
Projects="$(MSBuildProjectFile)"
Targets="WaitStop"/>
</Target>
<Target Name="UninstallService" DependsOnTargets="StopService">
<UninstallAssembly
AssemblyFiles="..\src\FolderName\ProjectName\bin\Debug\ProjectName.exe"
ContinueOnError="false">
</UninstallAssembly>
</Target>
服务
谢谢,我们将在关闭服务之前停止服务,但不会等待它们停止。经过进一步调查,在出现此问题之前的运行中,服务似乎无法启动-我将很快为我的问题添加一些详细信息。