Activator.CreateInstance启动不同路径的应用程序

时间:2010-11-12 18:03:54

标签: .net autocad

我正在研究这个项目,.Net EXE将启动AutoCAD并运行一些代码。谷歌搜索后,我有这样的选择:

a)Activator.CreateInstance
b)Process.Start

如果我使用b),AutoCAD启动后很难控制代码。所以a)是唯一的选择。在我客户的机器上,可以安装多个AutoCAD,不同版本(2008,2009,2010,2011等),不同的用户(AutoCAD Vanilla,AutoCAD Map,AutoCAD Architecture等)。对于不同的版本,我可以添加版本号,例如2008年的AutoCAD.Application.17.1。现在,不同的优势是我需要解决的唯一问题。例如我的机器上安装了AutoCAD Map和AutoCAD Architecture。他们在不同的文件夹中。 Activator.CreateInstance始终启动最新运行的。如何在我的exe中启动AutoCAD Map,即使我只使用AutoCAD Architecture。

2 个答案:

答案 0 :(得分:1)

对于AutoCAD Map,我认为您可以使用AutoCADMap.Application作为程序ID。对于ACA,它应该是AecX.AecArchBaseApplication

答案 1 :(得分:1)

您可以指定程序ID及其版本以启动特定的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);
        }
    }