Launch AutoCAD 2015 from .Net process

2019-07-09 03:52发布

问题:

I was trying to load AutoCAD 2015 from .Net process so that I can send commands to the document to create/modify blocks.

I tried both of these approaches but none of them seems to work.

1st approach:

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

2nd approach:

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

In both of the cases I am getting COM exception. Any help?

It's not a duplicate as mentioned in comments, I have tried both approaches mentioned in here.

COM exception -

Retrieving the COM class factory for component with CLSID {0B628DE4-07AD-4284-81CA-5B439F67C5E6} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

回答1:

I would recommend attempting to get an existing instance of AutoCAD first before creating a new instance each time your application runs.

Creating an instance each time is very expensive.

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:

Finally I was able to make it run for me. (Posting here so on one had to waste time like I did)

Not sure what was an exact issue though. Strangely, running VS 2013 as normal user worked fine but in case I run it as an administrator, it always fails with above mentioned COM exception.