2008-10-06 23 views

回答

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行:|