2011-02-13 128 views
3

我想遠程啓動或停止使用MSBuild的另一臺機器上的Windows服務。要做到這一點,我寫這個劇本:如何使用MSBuild遠程啓動/停止服務?

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 
    <Target Name="MyTarget"> 
    <ServiceController MachineName="Box2" ServiceName="MyService" Action="Stop" /> 
    </Target> 
</Project> 

當我運行的機器上,可以看到BOX2,我得到這個:

項目 「C:\腳本\的test.xml」在節點1上(默認爲 目標)。

C:\腳本\的test.xml(4,5):錯誤:無法 找到 '的MyService' 上 'BOX2' 服務完成正在 項目

「C:\腳本\ Test.xml「(默認目標) - FAILED。

我知道我有服務名稱正確的(我複製並從實際服務列表貼吧),我敢肯定,它可以看到BOX2,因爲如果我將其更改爲那並不是一個機器名(例如Box2asdf),它需要大約10秒鐘的時間(與你完全相同的錯誤,請注意),而不是我提供正確機器名稱時得到的即時響應。

我該如何調試此問題?

+0

是MyService實際安裝在Box2上? – 2011-02-13 01:09:17

+0

是的,它正在運行。 – 2011-02-13 02:51:33

回答

0

社區任務應該工作。只需使用Sc查詢來檢查服務是否有效。至於使用msbuild它仍然使用msbuild如果你把sc包裝在一個exec? 至少你沒有依賴於你的構建過程中的第三方DLL。

0

ServiceController Target內部使用ServiceController Class。但是它沒有返回它無法找到服務的原因。如果你確信電腦和服務名稱都是正確的,那麼我建議分析的下一件事是訪問衝突問題。

而@ jsobo的回答可以是診斷的實際原因非常有用,因爲它可以顯示本地錯誤,而他們身邊的.NET異常包裝:

SC.EXE \ BOX2停止爲MyService