我需要从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执行任何我想要的操作如果我把它放在服务中(请参阅Update),用我的"特殊"用户启动服务,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解决方案,并以用户身份运行它。这太难看了。我甚至数不出它会带来什么问题。但最后期限就是最后期限。。。我仍然对真正的解决方案持开放态度。
这里的问题是运行COM API所需的角色。。。Windows服务将没有此。。。
您可以尝试使用AutoCAD控制台进行自动化,请检查AutoCAD文件夹中的accordeconsole.exe。您需要创建一个脚本文件,其中包含要运行的命令列表(包括.NET自定义命令),然后启动控制台来运行此脚本。
应该有效。
很简单
Windows服务无法与桌面交互,也无法打开带有界面的程序。