我遇到了一件很奇怪的事情,几天都无法解决。我有一个自己编写的基于 .NET 的 32 位服务(使用 x86 标志编译),该服务在 Win 10 Pro 64 位计算机上运行,它使用 DCOM 组件 {6F17505C-4351-46AC-BC1E-CDE34BB53FAA}(OPC 服务器作为服务启动)。在纽约之前,它运行了几个月,没有出现问题,但上周我的服务无法启动,出现 0x80070005 错误。
System.UnauthorizedAccessException:IClassFactory 无法创建 CLSID 为 {6F17505C-4351-46AC-BC1E-CDE34BB53FAA} 的 COM 组件实例,原因是出现以下错误:80070005 访问被拒绝(异常 HRESULT:0x80070005(E_ACCESSDENIED))。在 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,布尔 publicOnly,布尔 noCheck,布尔& canBeCached,RuntimeMethodHandleInternal& ctor,布尔& bNeedSecurityCheck) 在 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis,布尔 fillCache,StackCrawlMark& stackMark) 在 System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly,布尔 skipCheckThis,布尔 fillCache,StackCrawlMark& stackMark) 在 System.Activator.CreateInstance(类型类型,布尔 nonPublic) 在 System.Activator.CreateInstance(类型类型) 在 OPCDA.NET.OpcServer.ConnectLocal(字符串 SrvName) 在 OPCDA.NET.OpcServer.Connect(字符串 SrvName) ...
两个服务都在本地系统帐户(SYSTEM)下运行,在 dcomcnfg 中为管理员和系统组件授予了权限,在注册表中为 HKEY_CLASSES_ROOT\AppID{6F17505C-4351-46AC-BC1E-CDE34BB53FAA} 授予了权限(好吧,我认为没有必要检查该分支的权限,但是我已经阅读了很多资料并尝试过了)。我也尝试过重新安装它们,但没有成功。卸载了 Windows 更新 - 没有运气。在此期间安装了几个由第三方安装的产品,但我相信这对 DCOM 通信不会有害。我还尝试创建具有管理员权限的用户并在该用户下启动这两个服务。
我希望您能在这种奇怪的情况下给我一些有用的建议。
答案1
好吧,我联系了 OPC 服务器制造商,支持人员告诉我(德语直译)“自今年年初以来,有很多错误报告,说 Windows 更新破坏了 OPC 通信”。因此,我卸载了自 12 月底以来的所有更新,然后 - 瞧 - 现在一切正常!
支持建议我运行以下批处理:
wusa /uninstall /kb:4056888 /quiet /norestart
wusa /uninstall /kb:4056890 /quiet /norestart
wusa /uninstall /kb:4056891 /quiet /norestart
wusa /uninstall /kb:4056892 /quiet /norestart
wusa /uninstall /kb:4056893 /quiet /norestart
wusa /uninstall /kb:4056897 /quiet /norestart
wusa /uninstall /kb:4056898 /quiet /norestart
但我没有列出任何已安装的更新。遗憾的是,我没有列出任何真正卸载的更新(在 Win10 中找不到更新历史记录,只能看到已安装的更新)。