我試圖使用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 exec任務調用msbuild
- 3. 在MSBuild中使用Zip任務
- 4. MSBuild任務使用TeamCity credentails
- 5. 使用WriteCodeFragment MSBuild任務
- 6. 郵編使用MSBuild任務
- 7. msbuild的SFTP任務?
- 8. MSBuild任務在自定義任務中使用TFS API後無提示失敗
- 9. 使用示例服務
- 10. Svcutil.exe MSBuild任務
- 11. XSLTC.EXE MSBuild任務
- 12. MSBuild WriteCodeFragment任務
- 13. 使用MSBuild 2015的AspNetMerge任務
- 14. 保存msbuild任務的外部文件
- 15. 任務中引用DLL的MSBuild
- 16. 在MSBuild中重寫繼承的任務
- 17. 在自定義任務中調用MSBuild任務
- 18. Haskell任務的Makefile示例
- 19. 開源msbuild任務
- 20. 多任務示例
- 21. MSBuild任務批處理多個任務
- 22. 在C/C++中創建Windows服務的任何示例? (無GUI)
- 23. NAnt中的MSBuild的XmlMassUpdate任務?
- 24. 使用XmlUpdate MSBuild任務更新CDATA節?
- 25. 如何使用YUI Compressor.Net MSBuild任務2.3.0.0
- 26. Nant msbuild任務,使用.net 4.0 rc
- 27. MSBuild使用任務和解決參考
- 28. 如何使用(wix)火炬msbuild任務?
- 29. 任何好的PowerShell MSBuild任務?
- 30. 訪問MSBuild中的InstallShield任務