事件构建pre&发布以停止并重新启动Windows服务

时间:2011-03-14 16:05:22

标签: visual-studio-2010 windows-services pre-build-event

我一直在尝试使用构建事件来启动和停止在我的项目中构建的Windows服务。然而对于前期和前期post版本失败,错误级别为255.我尝试使用预编译来捕获它,但没有运气。

预生成

if "$(ConfigurationName)" == "Debug"
(
 net stop myService
 if errorlevel 2 
    if errorlevel 255 
        :exit

   :exit
)

生成后

if "$(ConfigurationName)" == "Release"
(
   copy $(TargetDir) C:\Media\Bin\$(ProjectName)
   if errorlevel 1 BuildEventFailed

   :BuildEventFailed
   mkdir C:\Media\Bin\$(ProjectName)

   copy $(TargetDir) C:\Media\Bin\$(ProjectName)
)
else if "$(ConfigurationName)" == "Debug"
(
   net start myService
)

4 个答案:

答案 0 :(得分:22)

Joel Varty的以下博客有一个我使用的解决方案: Use Build Events to rebuild a Windows Service without having to manually stop/start it

唯一的问题是当你进行重建时。在预构建事件触发之前,Visual Studio会清除文件。然后当然失败因为服务仍在运行。但常规构建工作很棒。希望这可以帮助。

答案 1 :(得分:1)

尝试使用预构建代码第一行的左括号

答案 2 :(得分:1)

条件语句不需要double-qoute(“”)

应该是

if $(ConfigurationName) == Debug (
 net stop myService
 ...
)

答案 3 :(得分:0)

这就是我开始工作的方式:

(此解决方案是企业软件的一部分,其中一些dll文件被其他应用程序重用)

Model是一个在Service项目中引用的项目,它是在Service之前构建的。这就是我们在Model的Pre-Build Events中编写这些代码的原因:

模型预建事件:

xcopy /E /Y "$(ProjectDir)bin\Debug\*" "$(SolutionDir)UI\bin\Debug\ServiceFolder"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" "$(SolutionDir)UI\bin\Debug\ServiceFolder\Service.exe"
net start "Service Name"
  • 在输出文件夹
  • 中创建目录
  • 按名称查找服务
  • 停止
  • 卸载它
  • exit 0会导致构建过程在此处发生错误时继续

服务构建后事件:

{{1}}
  • 将服务所需的所有内容复制到其他文件夹
  • 安装服务
  • 启动服务

关于权限?

  • visual studio会自动要求提升许可