.net 使用msbuildtasks卸载程序集时,服务仅排队等待删除,服务器需要重新启动

.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

我正在设置一个项目,在WindowsServer2003上的teamcity集成服务器下运行(使用sp2)。集成测试使用具有最新版本msbuildtasks v1.2.0.306的msbuild运行。所有代码都是使用.NET2.0构建的

在build.xml文件中,我们删除系统使用的所有服务,重新构建它们并重新创建它们,然后运行一系列nunit测试,以确保它们能够很好地协同工作

要删除服务,我们使用卸载程序集任务,如下所示:

<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>

服务

谢谢,我们将在关闭服务之前停止服务,但不会等待它们停止。经过进一步调查,在出现此问题之前的运行中,服务似乎无法启动-我将很快为我的问题添加一些详细信息。