2011-09-27 36 views

回答

1

假設COM +組件是您的組件(ServicedComponent實例),那麼您可以使用<regsvcs> task來實現此目的。

你將不得不表明你的COM +組件是在裝配時,(與uninstallActionType使用action)刪除應用程序,然後重新安裝(您可能需要爲這兩個工作實例)。

如果您的程序集是而不是 COM +組件/應用程序的來源,那麼您將需要編寫自己的自定義任務,通過COM interop訪問COM+ Administration API

1

我一直在努力解決同樣的問題。找不到比vbs腳本更詳細的方法。我提出的解決方案如下:

我創建了一個引用NAnt.Core的C#.Net解決方案。我創建了兩個從Nant Task類繼承的類(任務)。您需要三樣東西: 1)類

 [TaskName("startupComApplicationTask")] 

2)將任務屬性上,你想從南特

3傳遞的任何屬性將TASKNAME屬性)實施ExecuteTask ()方法

最後的結果是這樣的:

[TaskName("startupComApplicationTask")] 
public class StartupComApplicationTask: Task 
{ 
    private string _applicationName; 
    private string _machineName; 

    [TaskAttribute("applicationName", Required = true)] 
    public string ApplicationName 
    { 
     get 
     { 
      return _applicationName; 
     } 
     set 
     { 
      _applicationName = value; 
     } 
    } 

    [TaskAttribute("machineName", Required = true)] 
    public string MachineName 
    { 
     get 
     { 
      return _machineName; 
     } 
     set 
     { 
      _machineName = value; 
     } 
    } 

    protected override void ExecuteTask() 
    { 
     COMAdminCatalog objAdmin = new COMAdminCatalog(); 
     objAdmin.Connect(MachineName); 

     var objCollection = (COMAdminCatalogCollection)objAdmin.GetCollection("Applications"); 

     objCollection.Populate(); 

     foreach (COMAdminCatalogObject objAppNames in objCollection) 
     { 
      if (objAppNames.Name.Equals(ApplicationName)) 
      { 
       ICatalogCollection objComponents = (ICatalogCollection)objCollection.GetCollection("Components", objAppNames.Key); 
       objComponents.Populate(); 
      } 
     } 

     objAdmin.StartApplication(ApplicationName); 
    } 
} 

顯然,爲了實現這一目標,您需要包含對ComAdmin互操作程序集的引用。你可以在Com參考文件的「COM + 1.0 Type Library」下找到它。

構建將爲您創建兩個dll的項目。 interop和你的。將這些放入你的nant文件夾(在bin目錄中)。

您可以從以下方式中南特調用這些:

<startupComApplicationTask machineName="193.132.119.249" applicationName="NantTest" /> 

爲shutingdown重複,只需調用,而不是StartApplication ShutdownApplication。

希望這會有所幫助