我需要从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解决方案,并以用户身份运行它。这很丑陋。我甚至无法计算它带来的问题。但截止日期是截止日期...... 我仍然对真正的解决方案持开放态度。
答案 0 :(得分:1)
这里的问题是运行COM API所需的角色...... Windows服务不会有这个......
您可以尝试使用AutoCAD Console自动化,检查AutoCAD文件夹中的accoreconsole.exe。您需要创建一个脚本文件,其中包含您要运行的命令列表(包括.NET自定义命令),然后启动控制台以运行此脚本。
应该工作。
答案 1 :(得分:0)
很简单
Windows服务无法与桌面交互,无法使用界面打开程序。