C# 获取外壳程序窗口会从非管理员用户引发访问被拒绝异常HRESULT:0x80070005(E_ACCESSDENIED)

C# 获取外壳程序窗口会从非管理员用户引发访问被拒绝异常HRESULT:0x80070005(E_ACCESSDENIED),c#,.net,vb.net,internet-explorer,windows-applications,C#,.net,Vb.net,Internet Explorer,Windows Applications,我正在尝试将Internet Explorer自动化。 要在系统上运行Internet Explorer,我使用以下语句 Dim allWindows = New SHDocVw.ShellWindows 它可以从系统上的管理员用户处正常工作。但是从非管理员用户运行相同的代码段会引发此异常 正在检索具有CLSID的组件的COM类工厂 {9BA05972-F6A8-11CF-A442-00A0C90A8F39}由于以下原因失败 错误:80070005访问被拒绝。(HRESULT的例外情况:0x

我正在尝试将Internet Explorer自动化。 要在系统上运行Internet Explorer,我使用以下语句

 Dim allWindows = New SHDocVw.ShellWindows
它可以从系统上的管理员用户处正常工作。但是从非管理员用户运行相同的代码段会引发此异常

正在检索具有CLSID的组件的COM类工厂 {9BA05972-F6A8-11CF-A442-00A0C90A8F39}由于以下原因失败 错误:80070005访问被拒绝。(HRESULT的例外情况:0x80070005 (E_)(拒绝)

所以我想知道获取ShellWindows需要什么样的特权?
或者如果有其他方法可以在没有任何权限限制的情况下获取ShellWindows?

此错误是因为UAC权限。您应该具有获取ShellWindows的管理员权限。 您可以在代码中启用UAC,如下所示: 在项目中添加app.manifest文件。 修改requestedExecutionLevel标记,如下所示:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

我自己解决了这个问题。事实上,这不是由于管理员或非管理员用户。当我们从任何用户登录到系统时,它工作正常,但无法运行的情况是

以某个用户身份登录,并使用从另一个用户运行应用程序 windows中的“运行方式”选项


然后windows将不允许您获取ShellWindows,由于安全原因,这种行为似乎没有问题。

我的应用程序不需要管理员权限。乍一看,我认为问题是由于非管理员用户造成的,但事实并非如此,而是由于以用户身份运行。