【问题标题】:Is there a NANT task to start/stop COM+ components?是否有启动/停止 COM+ 组件的 NANT 任务?
【发布时间】:2011-09-27 16:01:24
【问题描述】:

我正在使用 CC.net 和 NANT 构建脚本自动化我们的 deploymnet。我必须在部署期间停止和启动我们的 COM+ 组件。

是否有执行此操作的 NANT 任务?

【问题讨论】:

    标签: .net nant com+


    【解决方案1】:

    假设 COM+ 组件是您的组件(ServicedComponent 实例),那么您可以使用 <regsvcs> task 来实现这一点。

    您必须指出您的 COM+ 组件所在的程序集,删除应用程序(使用 actionuninstallActionType)然后重新安装它(为此您可能需要两个任务实例)。

    如果您的程序集不是 COM+ 组件/应用程序的来源,那么您将需要编写自己的自定义任务,通过 COM 互操作访问 COM+ Administration API

    【讨论】:

      【解决方案2】:

      我一直在努力解决同样的问题。找不到比 vbs 脚本更详细的方法。我想出的解决方案如下:

      我创建了一个引用 NAnt.Core 的 C# .Net 解决方案。我创建了两个继承自 Nant Task 类的类(任务)。你需要三样东西: 1)将TaskName属性放在类上

           [TaskName("startupComApplicationTask")]
      

      2) 在你想从 Nant 传入的任何属性上放置一个 Task 属性

          [TaskAttribute("machineName", Required = true)]
      

      3) 实现 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 类型库”下找到它。

      构建将为您创建两个 dll 的项目。互操作者和您的。将这些放入您的 nant 文件夹(在 bin 目录中)。

      您可以通过以下方式在 Nant 中调用它们:

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

      重复关闭,只需调用 ShutdownApplication 而不是 StartApplication。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2016-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2011-01-12
        相关资源
        最近更新 更多