部署后不创建Autocad实例

时间:2014-03-19 08:48:49

标签: c# asp.net iis-7 marshalling autocad

我遇到了使用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;
    }

如果您想要更多细节我可以提供

2 个答案:

答案 0 :(得分:0)

您的编组失败,因为ASP.NET进程在单独的帐户上运行,并且具有完全不同的运行对象表(ROT)。我很确定这项工作你必须从ASP.NET端实现一个新的会话。

答案 1 :(得分:0)

使用可视化互操作时,运行期望从asp.net直接进行用户交互的应用程序实例并不是那么简单。

您可能必须使用Windows窗体或WPF应用程序才能使用AutoCAD。问题可能是AutoCAD.Application互操作不允许非可视交互。