System.UnauthorizedAccessException:使用错误代码80070005创建COM组件实例失败(C#)

3

我有一个关于C# .NET命令行应用程序的问题,主要是使用COM对象从其他程序获取数据。当手动执行或在Node.js服务器内作为子进程运行时,它可以正常工作。但是,当整个项目安装为Windows服务时,C#应用程序会响应以下错误:

System.UnauthorizedAccessException: Creating an instance of the COM component with CLSID {D64DB4A9-3B26-4D2B-B556-9DA433C54175} from the IClassFactory failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at CurrentCamUri.Program.Main(String[] args)

据我所读的类似主题如这里,主要集中于Office应用程序,我应该看到"DCOM Config"选项卡内的COM对象在dcomcnfg /32中。但是,我无法找到与相关CLSID有关的任何内容。我尝试运行没有'/32'后缀的dcomcnfg也没有成功。我需要从中获取数据的主要应用程序是32位的(让我们称其为“母应用程序”)。您有什么建议可以解决这个问题吗?非常感谢!
1个回答

1

确保Windows服务正在运行在一个有权限访问COM组件的帐户下。

您可以通过启动regedt32.exe,转到HKCR\CLSID{D64DB4A9-3B26-4D2B-B556-9DA433C54175},右键单击并选择“权限…”来检查这些权限。


谢谢回复。我尝试使用 regedt32.exe,但在 HKCR\CLSID{D64DB4A9....} 下没有找到任何内容。不过在使用搜索后,我发现这个 CLSID 实际上是在 HKCR\ControlCenter.Automation\CLSID 下面。尽管我将“Permissions”修改为允许本地用户完全控制,并将 Windows 服务设置为同一用户,“仍然出现相同的错误”。 - k0ff33
如果它不在HKCR\CLSID{D64DB4A9....}下面,尝试检查HKLM\Software\Wow6432Node\Classes。 - Miner_Glitch
我在HKLM\Software\Wow6432Node\Classes\CLSID{64DB4A9...}下找到了它,权限似乎没问题(管理员/用户有完全访问权限),我尝试添加我的用户名并授予完全控制权限,但仍然无法工作。我想知道问题是否可能出在我的C#应用程序中处理COM方面?我不是每天都是C#开发人员。 - k0ff33
在HKLM\Software\Wow6432Node\Classes\AppID{64DB4A9...}下是否也有它的条目?如果是这样,请按照https://msdn.microsoft.com/en-us/library/ms687202(v=vs.85).aspx检查启动权限。 - Miner_Glitch
抱歉,在之前的评论中我漏掉了CLSID前面的D。在HKLM\Software\Wow6432Node\Classes\AppID{D64DB4A9...}中没有这样的条目。 - k0ff33
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接