2013-07-02 94 views
1

目前正在使用作爲Windows服務運行的WCF服務。測試Windows服務的增量開發

我已經做了一個安裝程序,並寫了一個腳本,它添加一個用戶帳戶,它運行在下,然後註冊並啓動服務下的帳戶。而在Visual Studio中的構建步驟將其複製到分立文件夾中,這樣我們就不會直接從解決方案中運行。一切正常。

但是,隨着我擴展和改進這項服務,測試它變得有點痛苦。每次我想檢查我的更改時,我必須停止服務,重新構建,重新啓動服務,然後重新將視覺工作室連接到該過程,然後才能逐步完成。

想知道是否有更快或更好的方法做到這一點,而不寫一些代理主機的所有服務?在這種情況下單元測試不會削減它,因爲服務需要執行系統安全措施,比如連接到Active Directory端點。

回答

0

我知道這個問題是古老的,但最近我解決了這個利用生成事件如下部分:

預生成事件:

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工作。希望這可以幫助別人!