2

我需要从 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 服务托管了 WCF。)

UDPATE2:由于我没有找到问题的解决方案,并且 AutoCAD 不会停止并显示有用的错误消息,因此我在不使用 Windows 服务的情况下解决了这个问题。目前,我在命令提示符解决方案中托管我的 WCF 解决方案,并以用户身份运行它。这很丑陋。我什至无法计算它会带来的问题。但最后期限就是最后期限……我仍然愿意接受真正的解决方案。

4

2 回答 2

1

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

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

应该管用。

于 2015-04-29T12:31:33.843 回答
0

很简单
Windows 服务无法与桌面交互,也无法打开带有界面的程序。

于 2018-06-08T06:07:30.137 回答