代码之家  ›  专栏  ›  技术社区  ›  weslleywang

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

  •  0
  • weslleywang  · 技术社区  · 15 年前

    我正在处理这个项目,.Net EXE将启动AutoCAD并运行一些代码。在谷歌搜索之后,我有以下选择:

    a) Activator.CreateInstance激活器
    b) 进程.开始

    如果我使用b),在AutoCAD启动后很难控制代码。所以a)是唯一的选择。在我的客户机上,可能安装了多个AutoCAD,不同的版本(2008、2009、2010、2011等),不同的偏好(AutoCAD Vanilla、AutoCAD Map、AutoCAD Architecture等)。对于不同的版本,我可以添加版本号,例如AutoCAD.Application.17.1 For 2008。现在我唯一需要解决的问题就是不同的恩惠。e、 我的机器上安装了AutoCAD地图和AutoCAD架构。它们在不同的文件夹中。Activator.CreateInstance总是启动最新的运行实例。如何在exe中启动AutoCAD Map,即使我只是使用AutoCAD架构。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Maxence    14 年前

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

        2
  •  1
  •   Andrew Barber Eric Lafortune    14 年前

    可以指定程序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);
            }
        }