如何使用Windows服务从.NET启动AutoCAD

时间:2014-02-13 23:54:33

标签: .net interop autocad autocad-plugin

我需要从Windows服务启动AutoCAD。此服务使用“特殊”域用户运行,该用户是为运行我的服务而创建的。该用户是计算机上的管理员,该用户在计算机上安装了AutoCAD 2014。 我用来从C#启动AutoCAD 2014的代码:

  IAcadApplication acadApp;
  try
  {
    var acadType = Type.GetTypeFromProgID("AutoCAD.Application.19", true);
    acadApp = (AcadApplication) Activator.CreateInstance(acadType, true);
  }
  catch (Exception ex)
  {
    // do fancy error handling here
  }

我有一个AutoCAD COM库的参考。 (Interop.AutoCAD.dll) 如果我使用登录用户运行上述代码,AutoCAD将启动,我可以使用SendCommand执行任何操作。 如果我将其置于服务中(请参阅更新,请使用我的“特殊”用户启动该服务,CreateInstance命令将抛出此内容:

{“由于以下错误,检索具有CLSID {BD0DEB94-63DB-4392-9420-6EEE05094B1F}的组件的COM类工厂失败:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE))。 “}

问题是,acad.exe启动,但停止消耗大约44 MB的内存,并在1-2分钟后,我得到异常。通常,acad.exe以112 MB内存消耗开始。 如果我以登录用户的名义运行服务,一切都按预期工作。两个用户都在同一个用户组中,同一个域。所以我的代码本质上是有效的。但目标是拥有一个可以运行AutoCAD的服务器程序。 如何在此方案中在服务器上运行AutoCAD?根据网络上的一些帖子,这可能是由访问权限问题引起的。但是,我必须赋予“特殊”用户哪些权利?

更新:当我在官方Autodesk论坛上发布时,我无法从服务启动AutoCAD。用户无所谓。 官方论坛上有人说,AutoCAD无法从服务中运行。无论是这个,还是具有许可的东西都可能导致这种行为......尽管如此,我仍然愿意接受任何从服务启动AutoCAD的解决方案。 (Windows Service托管WCF,更准确。)

UDPATE2 :由于我没有找到问题的解决方案,并且AutoCAD没有停止并显示有用的错误消息,因此我在不使用Windows服务的情况下解决了这个问题。目前,我正在命令提示解决方案中托管我的WCF解决方案,并以用户身份运行它。这很丑陋。我甚至无法计算它带来的问题。但截止日期是截止日期...... 我仍然对真正的解决方案持开放态度。

2 个答案:

答案 0 :(得分:1)

这里的问题是运行COM API所需的角色...... Windows服务不会有这个......

您可以尝试使用AutoCAD Console自动化,检查AutoCAD文件夹中的accoreconsole.exe。您需要创建一个脚本文件,其中包含您要运行的命令列表(包括.NET自定义命令),然后启动控制台以运行此脚本。

应该工作。

答案 1 :(得分:0)

很简单
Windows服务无法与桌面交互,无法使用界面打开程序。