【问题标题】:Launch AutoCAD 2015 from .Net process从 .Net 进程启动 AutoCAD 2015
【发布时间】:2016-03-01 21:26:44
【问题描述】:

我试图从 .Net 进程加载 AutoCAD 2015,以便我可以向文档发送命令以创建/修改块。

我尝试了这两种方法,但似乎都不起作用。

第一种方法:

AcadApplication app = new AcadApplication();
app.Visible = true;

第二种方法:

var t = Type.GetTypeFromProgID("AutoCAD.Application", true);
dynamic obj = Activator.CreateInstance(t, true);

在这两种情况下,我都会遇到 COM 异常。有什么帮助吗?

不是cmets中提到的重复,here中提到的两种方法我都试过了。

COM 异常 -

检索具有 CLSID 的组件的 COM 类工厂 {0B628DE4-07AD-4284-81CA-5B439F67C5E6} 由于以下原因而失败 错误:80080005 服务器执行失败(来自 HRESULT 的异常: 0x80080005 (CO_E_SERVER_EXEC_FAILURE))。

【问题讨论】:

  • 能贴一下COM异常的详细信息吗?
  • 这是 64 位 AutoCAD 还是 32 位?
  • @TheLethalCoder - 这不是重复的。请再次阅读问题详情。我确实尝试了那里提到的两种方法,但都不适合我。
  • @ParrishHusband - 64 位。附加了有问题的 COM 异常。
  • 理智问题,这是在服务的上下文中运行的吗?如果没有,是否已为用户运行(至少打开一次)AutoCad?

标签: c# .net autocad autocad-plugin


【解决方案1】:

我建议您在每次运行应用程序时先尝试获取现有的 AutoCAD 实例,然后再创建新实例。

每次创建一个实例非常昂贵。

try
{
  GetAutoCAD();
}
catch (COMException cx)
{
    try
    {
        StartAutoCad();
    }
    catch(Exception ex)
    {
      Log.Error(ex);
      throw;
    }
}

void GetAutoCAD()
{
    // try to Get an instance
    _application = Marshal.GetActiveObject(_autocadClassId);
}

void StartAutoCad()
{
    var t = Type.GetTypeFromProgID(_autocadClassId, true);
    var obj = Activator.CreateInstance(t, true);
    _application = obj;
}

【讨论】:

    【解决方案2】:

    最后我能够让它为我运行。 (在这里发帖,不得不像我一样浪费时间)

    虽然不确定是什么问题。奇怪的是,以普通用户身份运行 VS 2013 运行良好,但如果我以管理员身份运行它,它总是会因上述 COM 异常而失败。

    【讨论】:

    • 第一次运行时,AutoCAD 会自行配置。可能它从未以管理员身份运行过。
    • @Maxence - 我以管理员身份运行它,然后尝试从我的代码中启动它,但仍然是同样的问题。 AutoCAD 是否仅从首次运行时选择配置?安装后我没有以管理员身份运行它。
    • 你的第二种方式更灵活,我使用第一种方式开发,然后在部署前将类型更改为动态。这样我就可以使用字符串值“AutoCAD.Application”作为设置来跟上新版本的 AutoCAD。
    猜你喜欢
    • 2021-08-19
    • 2014-03-13
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2019-09-24
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多