是否有NANT任务来启动/停止COM +组件?

时间:2011-09-27 16:01:24

标签: .net nant com+

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

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

2 个答案:

答案 0 :(得分:1)

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

您必须指明您的COM +组件所在的程序集,删除该应用程序(使用action uninstall {{1}}),然后重新安装(您可能需要两个任务实例)。

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

答案 1 :(得分:1)

我一直在努力解决同样的问题。找不到比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" />

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

希望这有帮助