我遇到了使用C#运行autocad应用程序的问题。因为我是初学者,我的大部分代码都是从网上复制粘贴的。
问题是我正在使用c#开发一个Web应用程序,它将在运行时创建一个实例化的autocad实例。在开发服务器以及我的本地IIS服务器上,每件事都可以。但是当我在服务器(窗口服务器8)上部署Web应用程序时,我收到以下错误
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服务器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 :(得分:0)
您的编组失败,因为ASP.NET进程在单独的帐户上运行,并且具有完全不同的运行对象表(ROT)。我很确定这项工作你必须从ASP.NET端实现一个新的会话。
答案 1 :(得分:0)
使用可视化互操作时,运行期望从asp.net直接进行用户交互的应用程序实例并不是那么简单。
您可能必须使用Windows窗体或WPF应用程序才能使用AutoCAD。问题可能是AutoCAD.Application互操作不允许非可视交互。