2014-03-19 31 views
0

我遇到了有關使用C#運行autocad應用程序的問題。由於我是初學者,我的大部分代碼都是從網上粘貼的。部署後未創建Autocad實例

問題是我正在開發一個使用c#的web應用程序,它將在運行時創建一個實例化的autocad實例。在開發服務器上以及在本地IIS服務器上,每件事情都很好。但是當我部署在服務器上的Web應用程序(窗口服務器8)我收到下面的錯誤

Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) 
at System.Runtime.InteropServices.Marshal.GetActiveObject(Guid& rclsid, IntPtr reserved, Object& ppunk) 
at System.Runtime.InteropServices.Marshal.GetActiveObject(String progID) 
at DQMF.CDQMF.createAacdApplicationInstance(String progID) 

我認爲這是因爲某些特權問題。因爲在我的本地機器上,autocad實例正在運行系統權限並且在服務器(Windows Server 8)上運行(使用開發服務器)作爲管理權限。

AcadApplication createAacdApplicationInstance(string progID) 
    { 
     AcadApplication app = null; 
     try 
     { 
      app = (AcadApplication)Marshal.GetActiveObject(progID); 
     } 
     catch (Exception e) 
     { 
      try 
      { 
       Type acType = Type.GetTypeFromProgID(progID); 
       app = (AcadApplication)Activator.CreateInstance(acType, true); 
       app.Visible = false; 
       app.Width = 1; 
       app.Height = 1; 
       app.WindowState = AutoCAD.AcWindowState.acMin; 
       app.Visible = false; 
      } 
      catch (Exception ex) 
      { 
       //File.AppendAllText("D:/test/DQMS_log.txt", ex.Message+" progID is: "+progID+Environment.NewLine+"app caption: "+app.Caption); 
      } 
     } 
     return app; 
    } 

如果你想要一些更詳細的,我可以給

回答

0

你編組失敗,因爲ASP.NET進程在單獨的帳戶運行,並具有完全不同的運行對象表(ROT)。我非常確定這一點,你必須從ASP.NET端實例化一個新的會話。

0

使用可視化的interop時,運行asp.net的直接用戶交互應用程序的實例並不那麼簡單。您可能不得不使用Windows窗體或WPF應用程序來使用AutoCAD。問題可能在於AutoCAD.Application interop不允許進行非視覺交互。