首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于不同路径的Activator.CreateInstance启动应用程序

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

Stack Overflow用户
提问于 2010-11-13 02:03:54
回答 2查看 756关注 0票数 0

我在这个项目上工作,一个.Net的EXE将启动AutoCAD和运行一些代码。在谷歌搜索之后,以下是我的选择:

a) Activator.CreateInstance

b) Process.Start

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-07 15:21:36

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-10 16:21:01

您可以指定程序id及其版本来启动特定的AutoCAD版本,如下所示:

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4167667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档