.NET Framework COM对象在HKCU注册且UAC关闭时CreateObject调用失败的根因咨询
.NET Framework COM对象在HKCU注册且UAC关闭时CreateObject调用失败的根因咨询
各位好,我碰到了一个非常特定场景下的COM组件调用问题,折腾了挺久没摸透根因,想请教下社区里的大佬们。
先明确下这个问题的触发前提:只有当UAC关闭时才会出现,比如使用Windows Server系统里的内置管理员账号的情况。
复现步骤
- 用.NET Framework 4.8创建一个对外暴露COM接口的DLL
- 把这个DLL的COM注册信息写到
HKEY_CURRENT_USER(也就是HKCU\SOFTWARE\Classes\CLSID这类常规COM注册路径),而非HKEY_LOCAL_MACHINE - 通过VBA或者VBScript调用
CreateObject(...)来访问这个COM组件
预期与实际行为
- 预期:组件能被正常调用成功
- 实际:大部分场景下都能正常工作,但如果当前用户是Windows Server的内置管理员且UAC关闭,调用
CreateObject就会抛出错误:
The system cannot find the file specified.
目前查到的有限线索
我翻了大量资料都没找到这个问题的官方文档,只在一个GitHub线程里看到微软员工的一段隐晦评论,提到.NET Framework在处理HKCU下的COM注册时存在安全相关的问题,但对方明确表示不能披露具体细节。
我已经整理出了几个可用的 workaround 并写在了对应的回答里,不过每个方案都有各自的局限性。现在最让我好奇的是这个问题的根因到底是什么,如果各位大佬有相关的经验或者内部信息,欢迎分享你的见解!
内容来源于stack exchange
相关产品推荐
相关产品推荐

