我需要从 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 解决方案,并以用户身份运行它。这很丑陋。我什至无法计算它会带来的问题。但最后期限就是最后期限……我仍然愿意接受真正的解决方案。