如何知道某个PIA调用了哪个COM组件?
我的盒子上安装了 PIA,它是 Microsoft.mshtml。如果我理解正确的话,这些 PIA 是由 Microsoft 提供的,旨在简化 COM 互操作的生活。但我想知道这个 PIA 实际上包装/调用了哪个 COM 组件。因为我遇到了 UnauthorizedAccessException,所以我想找到实际的 COM 组件并使用 dcomcnfg.exe 授予它适当的权限。我希望这是正确的方向。
谢谢!
I got a PIA installed on my box, it is Microsoft.mshtml. If I understandd it correctly, these PIA is provided by Microsoft to ease our life of COM interop. But I want to know which COM component is actually wrapped/called by this PIA. Because I am having a UnauthorizedAccessException, I want to locate the actual COM component and use dcomcnfg.exe to grant it proper permission. I hope this is the right direction.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它是c:\windows\system32\mshtml.dll。我严重怀疑 dcomcnfg.exe 能否解决您的问题,这是一个进程内 COM 服务器。您可以通过使用 Sysinternals 的 ProcMon 实用程序来准确查看哪个注册表或文件访问正在生成异常,从而获得更多见解。查找错误代码 5。
仅当您在自己的公共类中公开来自该 COM 服务器的类型时,才需要 PIA。不那么常见。 PIA 因 VS2010 中出色的“嵌入互操作类型”选项而成为历史。绰号为“no pia”选项。您可以使用“项目 + 添加引用”、“浏览”选项卡、选择“c:\windows\system32\mshtml.tlb”来避免 PIA。早期版本的 Windows 中的 .dll。
It is c:\windows\system32\mshtml.dll. I seriously doubt that dcomcnfg.exe is going to solve your problem, this is an in-process COM server. You might get more insight by using Sysinternals' ProcMon utility to see exactly which registry or file access is generating the exception. Look for error code 5.
You only need the PIA when you expose types from that COM server in your own public classes. Not that common. PIAs are history with the terrific "Embed Interop Types" option in VS2010. Nicknamed the "no pia" option. You avoid the PIA with Project + Add Reference, Browse tab, select c:\windows\system32\mshtml.tlb. The .dll in earlier versions of Windows.