Существует ли задача NANT для запуска / остановки компонентов COM +? - PullRequest
2 голосов
/ 27 сентября 2011

Я автоматизирую наш deploymnet, используя CC.net и скрипт сборки NANT. Я должен остановить и запустить наши компоненты COM + во время развертывания.

Есть ли задача NANT, которая делает это?

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Я боролся с той же проблемой. Не удалось найти какой-либо другой подробный способ, кроме сценариев VBS Решение, которое я придумал, следующее:

Я создал решение C # .Net, которое ссылается на NAnt.Core. Я создал два класса (задачи), которые наследуются от класса Nant Task. Вам нужно три вещи: 1) Поместите атрибут TaskName в класс

     [TaskName("startupComApplicationTask")]

2) Поместите атрибут Task в любые свойства, которые вы хотите передать из Nant

    [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 + 1.0 Type Library" в ваших ссылках Com.

Создайте проект, который создаст две библиотеки для вас. Интероп один и твой. Перетащите их в свою папку nant (в каталоге bin).

Вы можете вызвать их изнутри Нанта следующим образом:

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

Повторите для выключения, просто вызовите ShutdownApplication вместо StartApplication.

Надеюсь, это поможет

1 голос
/ 27 сентября 2011

Предполагая, что компоненты COM + являются вашими компонентами (ServicedComponent экземпляров), вы можете использовать задачу <regsvcs> для достижения этой цели.

Вы должны указать сборку, в которой находятся ваши компоненты COM +, удалить приложение (используя action с ActionType из uninstall) и затем установить его снова (вы можете для этого нужно два экземпляра задачи).

Если ваша сборка не является источником компонентов / приложения COM +, то вам нужно будет написать свою собственную задачу, обращаясь к API администрирования COM + через взаимодействие COM.

...