Activator.CreateInstance запускает приложение по другому пути - PullRequest
0 голосов
/ 12 ноября 2010

Я работаю над этим проектом. .Net EXE запускает AutoCAD и запускает некоторый код.После поиска в Google, у меня есть следующие варианты:

a) Activator.CreateInstance
b) Process.Start

Если я использую b), после запуска AutoCAD трудно контролировать код,так а) это единственный выбор.На компьютере моего клиента возможно иметь несколько установленных AutoCAD, разные версии (2008, 2009, 2010, 2011 и т. Д.), Разные предпочтения (AutoCAD Vanilla, AutoCAD Map, AutoCAD Architecture и т. Д.).Для другой версии я могу добавить номер версии, например, AutoCAD.Application.17.1 для 2008. Теперь другая проблема - единственная проблема, которую мне нужно выяснить.Например, на моей машине установлены AutoCAD Map и AutoCAD Architecture.Они находятся в другой папке.Activator.CreateInstance всегда запускает последнюю запущенную версию.Как я могу запустить AutoCAD Map в моем exe, даже если я просто использую AutoCAD Architecture.

Ответы [ 2 ]

1 голос
/ 10 июня 2012

Вы можете указать идентификатор программы и ее версию для запуска определенной версии AutoCAD, например:

    private void addCircleToACAD_Click(object sender, EventArgs e)
    {
        AcadApplication acadApp = null;
        AcadCircle circle = null;
        AcadAcCmColor color = null;
        try
        {
            object obj = Marshal.GetActiveObject("AutoCAD.Application.18");
            if (obj != null)
            {
                acadApp = obj as AcadApplication;
                double[] cen = new double[] { 0, 0, 0 };
                circle = acadApp.ActiveDocument.Database.ModelSpace.AddCircle(cen, 10);
                color = acadApp.GetInterfaceObject("Autocad.AcCmColor.18") as AcadAcCmColor;
                color.SetRGB(50, 150, 250);
                circle.TrueColor = color;
                acadApp.ZoomExtents();
            }
            else
            {
                MessageBox.Show("AutoCAD is not open or version is not right.");
            }
        }
        catch
        {
            MessageBox.Show("AutoCAD is not open or version is not right.");
        }
        finally
        {
            if (color != null) Marshal.FinalReleaseComObject(color);
            if (circle != null) Marshal.FinalReleaseComObject(circle);
            if (acadApp != null) Marshal.FinalReleaseComObject(acadApp);
        }
    }
1 голос
/ 07 июня 2012

Для AutoCAD Map, я думаю, вы можете использовать AutoCADMap.Application в качестве идентификатора программы.Для ACA это должен быть AecX.AecArchBaseApplication

...