我正在尝试自动化Internet Explorer。为了处理在系统上运行Internet Explorer,我使用以下语句
Dim allWindows = New SHDocVw.ShellWindows
系统上的管理员用户可以正常工作。但是从非admin用户运行相同的代码段会抛出此异常。
使用CLSID为组件检索COM类工厂{9BA05972-F6A8-11CF-A442-00A0C90A8F39}由于以下原因失败错误:80070005访问被拒绝。HRESULT异常:0x80070005(E_ACCESSDENIED))
所以我想知道什么样的特权需要获取ShellWindows?或者如果有一些替代方法来获取ShellWindows没有任何特权限制?
此错误是由于UAC权限。一个人应该有管理员权限来获取ShellWindows。你可以在你的代码中启用UAC:在项目中添加app.manifest文件。修改requestdexecutionlevel标签如下:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
我自己解决了这个问题。实际上,这与管理员或非管理员用户无关。当我们从任何用户登录系统时它都能正常运行但当
无法运行时以某个用户登录,并从另一个用户使用
那么windows将不允许您获取ShellWindows,由于安全原因,这种行为似乎很好。