2011-04-27 85 views
22

我的解決方案有一堆項目,其中一個是Windows服務;我有一個prebuild步驟來停止服務和一個postbuild步驟來重新啓動它(這樣,當windows正在構建/覆蓋它時,windows service exe不會被鎖定)。在Visual Studio 2010的預生成步驟中吞吐錯誤

on pre-build: 
net stop myservice 

on post-build: 
net start myservice 

如果在啓動構建時服務沒有運行,則net stop命令將失敗並阻止構建繼續。

即使預構建步驟失敗,我還能做些什麼仍然強制構建?

回答

39

我想通了 - 你只需要在最後添加以下語句:

SET ERRORLEVEL = 0 

或簡單地說:

EXIT 0 
-2

將該命令嵌入到總是返回0的可執行文件中解決您的問題?

在C調用

system("net stop myservice") 
+0

它不喜歡它 - 錯誤9009 – Andrey 2011-04-27 15:36:56

19

我知道這是一箇舊的帖子,但我最近也有這個問題。我想殺死我是建設,如果它是當前正在運行的過程中,發現我可以這樣做:

taskkill /f /im $(TargetName).exe 2>nul 1>nul 
Exit 0

2>nul 1>nul沒有Exit 0,反之亦然,似乎並沒有工作。我必須這樣做。

另外值得注意的,這是使用Visual Studio Express的2012

我找到了解決辦法正在研究這個問題的時候,以及on this blog

的2> NUL 1> NUL將吞下標準錯誤和標準輸出從命令。 EXIT 0將確保構建事件返回0.

+1

爲我工作用VS2013 – codea 2015-04-03 12:32:58

+0

這正是我試圖做。另外一點信息:我發現批處理文件中的'EXIT 0',從具有'CALL myscript.bat'的VS2015構建動作中調用,將導致整個動作退出,而不是在'myscript.bat'之後繼續。但是這是通過使用'SET ERRORLEVEL = 0'來解決的。 – 2016-10-23 16:04:24

+0

或更好只是 '''2> nul&set errorlevel = 0''' 這可以讓你有一個額外的行後。無需重定向標準輸出'''1> nul''' – 2017-04-04 12:49:34

1

沒有必要重新校驗stdout,只需stderr。另外,如果需要,set errorlevel可以讓您在以後增加額外的行數。退出將立即終止。

taskkill /f /im:$(TargetFileName) 2>nul &set errorlevel=0

工程在2017年VS