作为项目的一部分,我正在使用CorelDRAW进行COM自动化。自动化是通过控制台应用程序实现的,该应用程序最终将由Web服务启动,但为了尝试解决此问题背后的问题,将作为计划任务运行。这适用于我的开发机器(运行32位Windows Server 2003),但在运行64位Windows Server 2003的计算机上出现COM错误80080005失败。
事件查看器日志中似乎没有任何额外信息[请参阅下面的编辑]。
如果我使用运行计划任务的帐户登录并运行控制台应用程序,它会按预期工作 - 所以我不认为这是64位问题上的32位(但我很乐意纠正)
问题似乎是计划任务没有以CorelDRAW期望/要求的方式“登录”。如果这是问题,为什么它不会发生在我的开发机器上?我是否在开发机器上更改了一些设置以便允许这样但现在已经忘记了?
在研究类似问题的同时,在这里和其他地方,我尝试了很多方面,包括:
检查启动帐户是否已作为服务登录,并以secpol.msc中设置的批处理文件的身份登录。
检查CorelDRAW对象是否在dcomcnfg中设置了本地启动和本地激活。
通过将启动用户添加到计算机的管理员组并审核失败的对象访问来检查文件访问权限。
从我的开发计算机上的启动帐户中删除权限,以便重现错误(我不能)。
我还应该尝试什么?
修改
在进行了一些挖掘之后,事件查看器日志中似乎确实存在额外信息。
对象ServiceActive的事件ID 560存在审核失败。我可以找到Windows Server 2003 SP1的修复程序,但我在两台计算机上运行SP2。我发现http://social.msdn.microsoft.com/forums/en-US/windowstransactionsprogramming/thread/98683298-75da-4952-b2c1-057419c85501/建议使用sc sdset ...
。
如果我将运行计划任务的帐户添加到管理员组,我会
The application, c:\Program Files (x86)\Corel\CorelDRAW Graphics Suite X5\Programs\CorelDRW.exe, generated an application error The error occurred on 03/19/2012 @ 08:20:25.869 The exception generated was c0000005 at address 65F6378B (CrlUtl!CrlUtl::WDictionaryIterator<IBaseBind,ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > >::GetNext)
这表明找不到它想要找到的东西。
答案 0 :(得分:0)
您正在获取 CO_E_SERVER_EXEC_FAILURE ,这表明COM服务器(在您的情况下,我认为它是本地DCOM CoralDraw服务器)无法启动。
我的猜测是这是一个特权问题。如果我理解正确,这不是开发机器与生产机器问题,而是交互式登录与计划任务问题。
这是对的吗?只是为了消除副作用,使suare CarolDraw与运行计划任务的用户帐户交互运行良好,然后在从命令行启动时运行控制台程序。
您使用的是Windows预定版吗?我怀疑你错过了'NT AUTHORITY \ INTERACTIVE'或'CONSOLE LOGON'组成员身份。要验证此假设,请让命令行转储当前令牌的组成员身份和权限(GetTokenInformation是API),并比较作为计划任务运行时和从命令行运行时获得的内容。