我知道这个问题很古老,但我最近使用构建事件解决了部分问题,如下所示:
预建事件:
if "$(ConfigurationName)" neq "Debug" goto NoStop
echo Attempting to stop windows service MyService
net stop MyService > MyService.log
if "%errorlevel%" neq "0" (call )
type MyService.log
:NoStop
构建后事件:
if "$(ConfigurationName)" neq "Debug" goto NoStart
findstr "/c:stopped successfully" MyService.log >nul
if "%errorlevel%" equ "0" net start MyService
(call )
:NoStart
这种方法的特点:
- 检查配置,如果我没有在 Debug 中构建,则跳过整个位。
- NET STOP 命令将尝试停止您的服务,并且它下面的 if 命令将吞下任何可能发生的错误。如果您的服务未安装或未运行,这很好。
- 由于服务已停止,服务 EXE 已解锁,并且构建不会因那些烦人的“文件已锁定”错误而失败。
- 只有在构建前事件成功关闭服务时,构建后事件才会启动服务。FINDSTR 命令在预构建事件期间创建的日志文件中搜索字符串“已成功停止”。如果找到,则调用 NET START。无论哪种方式,错误都会被下一行的 (call ) 吞没。
这在 Windows 7 上运行的 Visual Studio 2015 中为我工作。希望这对某人有所帮助!