【问题标题】:How to start AutoCAD from .NET, using Windows Service如何使用 Windows 服务从 .NET 启动 AutoCAD
【发布时间】:2014-03-13 03:41:15
【问题描述】:

我需要从 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 解决方案,并以用户身份运行它。这很丑陋。我什至无法计算它会带来的问题。但是截止日期就是截止日期... 我仍然对真正的解决方案持开放态度。

【问题讨论】:

  • OP在此处添加了新信息:forums.autodesk.com/t5/NET/…
  • 请问您为什么需要从服务启动 Autocad。由于您从服务启动它,我相信您不需要与它进行用户交互。您需要做什么,包括将 Autocad 作为服务运行?
  • @PauloCorreia:我们需要自动运行 LISP 程序。它接收一些输入值(Excel),并进行复杂的设计。我们不需要用户交互。 (从来没有说过我们需要它......)我的问题是:在服务中使用互操作,我无法创建 AutoCAD 的实例(无法启动它),所以我无法用它做任何事情。

标签: .net interop autocad autocad-plugin


【解决方案1】:

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

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

应该可以。

【讨论】:

  • 哇。不知道那个工具。谷歌搜索->似乎promising。我会尽快尝试。感谢您发布此信息。如果它确实有效,我一定会将您的答案标记为解决方案。
  • 我们最终使用 accoreconsole.exe 从服务运行 AutoCAD。我们确实用自定义 .NET 代码(插件)替换了 LISP 代码,并且正如 Augusto Goncalves 所建议的,我们正在使用脚本来加载代码并运行它。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 2015-11-28
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多