我試圖使用Microsoft.Sdc.Tasks.ServiceProcess.Exists
來檢查服務是否存在。雖然沒有在文檔中使用它的例子。任何人都有一個?使用服務的示例存在Microsoft.Sdc.Tasks中的MSBuild任務?
1
A
回答
1
我實際上並沒有在生產環境中實際使用過它,我不確定您擁有哪個版本(我擁有版本2.1.3155.0的副本),並根據隨附的.chm幫助文件,任務具有以下內容屬性:
- 如果指定的服務存在
- 如果服務被禁用
- 服務名稱標識服務於該系統中的短名稱IsDisabled返回TRUE DoesExist返回TRUE。
ServiceName需要設置爲「識別系統服務的短名稱,例如'W3SVC'」。
您可能想嘗試使用衆所周知的服務(例如mssqlserver)並檢查其他兩個屬性(DoesExist/IsDisabled)的結果。
更新:下面是一個示例(作品):
導入任務,然後調用(如)
< Microsoft.Sdc.Tasks.ServiceProcess.Exists 服務名稱= 「服務器」> <輸出TaskParameter = 「DoesExist」 屬性名= 「存在」/> < /Microsoft.Sdc.Tasks.ServiceProcess.Exists>
<消息文本= 「服務存在?$(存在)」/>
2
這就是我們如何檢查服務是否存在,如果是,停止它,做一些事情,並再次啓動服務(如果有一個,它已經啓動)。
助手目標:
<target name="service_exists">
<script language="C#">
<references>
<include name="System.ServiceProcess.dll" />
</references>
<code><![CDATA[
public static void ScriptMain(Project project) {
String serviceName = project.Properties["service.name"];
project.Properties["service.exists"] = "false";
project.Properties["service.running"] = "false";
System.ServiceProcess.ServiceController[] scServices;
scServices = System.ServiceProcess.ServiceController.GetServices();
foreach (System.ServiceProcess.ServiceController scTemp in scServices)
{
if (String.Compare(scTemp.ServiceName.ToUpper(), serviceName.ToUpper()) == 0)
{
project.Properties["service.exists"] = "true";
project.Log(Level.Info, "Service " + serviceName + " exists");
if (scTemp.Status.Equals(System.ServiceProcess.ServiceControllerStatus.Running))
project.Properties["service.running"] = "true";
project.Log(Level.Info, "Service " + serviceName + " is running: " + project.Properties["service.running"]);
return;
}
}
project.Log(Level.Info, "Service " + serviceName + " doesn't exist");
}
]]></code>
</script>
</target>
用法:
<property name="service.name" value="Selection.Service" />
<call target="service_exists" />
<servicecontroller action="Stop" service="${service.name}" machine="${host}" timeout="60000" if="${service.exists}"/>
<!-- Do something -->
<servicecontroller action="Start" service="${service.name}" machine="${host}" timeout="60000" if="${bool::parse(service.exists) and bool::parse(service.running) == true}"/>
希望我沒有錯過任何東西 - 我們的建設管理保持一切都在一個文件的MSBuild現在超過3600行:|
相關問題
- 1. 使用MSBuild和Microsoft.Sdc.Tasks安裝win32服務
- 2. 郵編使用MSBuild任務
- 3. 使用WriteCodeFragment MSBuild任務
- 4. msbuild的SFTP任務?
- 5. MSBuild任務在自定義任務中使用TFS API後無提示失敗
- 6. 使用示例服務
- 7. Svcutil.exe MSBuild任務
- 8. MSBuild WriteCodeFragment任務
- 9. XSLTC.EXE MSBuild任務
- 10. 使用MSBuild 2015的AspNetMerge任務
- 11. 保存msbuild任務的外部文件
- 12. 任務中引用DLL的MSBuild
- 13. 在MSBuild中重寫繼承的任務
- 14. 開源msbuild任務
- 15. MSBuild回聲任務?
- 16. 在C/C++中創建Windows服務的任何示例? (無GUI)
- 17. Nant msbuild任務,使用.net 4.0 rc
- 18. 如何使用(wix)火炬msbuild任務?
- 19. 使用XmlUpdate MSBuild任務更新CDATA節?
- 20. 調用SignalR Async的JQuery示例任務
- 21. 任何好的PowerShell MSBuild任務?
- 22. 在使用異步任務的活動中完成任務呼叫服務
- 23. 如何能任務參數中的MSBuild
- 24. 在Python中使用HTTPS的Apache Thrift服務示例
- 25. 在MSBuild任務中拋出錯誤
- 26. 在MSBuild任務中生成代碼
- 27. 如何在MSBUILD中執行任務?
- 28. 使用飛鏢服務示例網站
- 29. 如何使用wpm2 bps服務器的bpmn服務任務?
- 30. 使MSBuild的Exec任務顯示交互式外殼