【问题标题】:Cannot add "C:\Windows\System32\shdocvw.dll" to my project无法将“C:\Windows\System32\shdocvw.dll”添加到我的项目中
【发布时间】:2013-02-14 14:18:01
【问题描述】:

我使用 VS 2010 Ultimate。

我正在尝试通过右键单击 References -> Add Reference...,然后单击 Browse 并导航到,将“shdocvw.dll”添加到我的项目引用中“C:\Windows\System32\shdocvw.dll”,但是当我单击 Add 按钮时,什么也没有发生。对话框甚至没有关闭。

知道我做错了什么吗?

我尝试重新启动 VS,但一直遇到这个问题。

【问题讨论】:

  • 至少有办法手动完成吗?

标签: c# visual-studio visual-studio-2010


【解决方案1】:

在您的 C# 解决方案中,如果您添加对名为“Microsoft Internet Controls”的 COM 组件的引用,您应该能够从 C# 控制台应用程序访问 SHDocVw 命名空间,而无需执行任何异常操作。

一旦我这样做了(在 VS 2008 中),我就可以使用 SHDocVw.ShellWindows、SHDocVw.IWebBrowser2 等等。例如:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();

foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
    Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
    if (ie.LocationURL.Contains("foo.com"))
        ie.Quit();
}

编辑:使用 VS 2012/.NET 4.x 时,您可以改用以下方法来解决错误“无法嵌入互操作类型 'SHDocVw.ShellWindowsClass'。”

using SHDocVw;
// ... snip ...
            SHDocVw.ShellWindows shellWindows = new ShellWindows();
            foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
            {
                Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
                if (ie.LocationURL.Contains("foo.com"))
                    ie.Quit();

有关 VS 2012 问题的更多信息,请参阅此答案:

C# How to get current URL from the IE?

【讨论】:

  • 我终于尝试了这个并且似乎有效。这将是我问题的实际答案...... 6 个月后!
  • 现在不行了。 :( 我使用的是 VS 2012,它说:Error 4 Interop type 'SHDocVw.ShellWindowsClass' cannot be embedded。请改用适用的接口。
  • Jayson,感谢您提供的信息 - 我更新了 VS 2012 的答案。
  • 与此答案无关,但我是通过您关于此的博客文章来到这里的。您可能希望使用 VS2012 修复程序更新博客文章 blog.likewise.org/2012/03/…
【解决方案2】:

问题在于shdocvw.dll 不是.NET 程序集,它既是普通的Win32 DLL 又是ActiveX 控件,但不是程序集。您可以添加作为对 C# 项目的引用的唯一内容是 .NET 程序集。

好的,那么问题来了,为什么要在 C# 项目中添加对 shdocvw.dll 的引用?可能是因为您想使用 Internet Explorer 的 ActiveX 接口在您的应用程序中包含一个网络浏览器。

如果是这样,那么如果您正在编写 Windows 窗体应用程序,则应使用 WinForms WebBrowser 控件,如果您正在编写 WPF 应用程序,则应使用 WPF WebBrowser 控件。以下是 Windows 窗体的说明:

但如果出于某种原因您想自己包含控件,而不是使用“罐装”版本,那么您需要将其添加到 Visual Studio Toolbox,如下所述:

【讨论】:

    【解决方案3】:

    不幸的是,这是我以前见过的常见请求。

    您不能将其添加为参考。您需要将其添加为工具箱项,将其放入表单中,然后 bob 就是您的叔叔...

    这是一个特点!

    这里有完整的说明:http://www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多