无法将“C:\ Windows \ System32 \ shdocvw.dll”添加到我的项目中

时间:2011-06-30 04:55:14

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

我使用的是VS 2010 Ultimate。

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

知道我能做错什么吗?

我尝试重启VS但仍然遇到这个问题。

3 个答案:

答案 0 :(得分:17)

在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时,您可以使用下面的方法来解决错误“无法嵌入Interop类型'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?

答案 1 :(得分:2)

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

好的,这就引起了一个问题,你为什么要在{C}项目中添加对shdocvw.dll的引用?可能是因为您希望使用Internet Explorer的ActiveX接口在您的应用程序中包含Web浏览器。

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

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

答案 2 :(得分:1)

这是我之前见过的一个不幸的常见请求。

您无法将其添加为参考。您需要将其添加为工具箱项目,将其放入表单中,然后将其作为您的叔叔......

这是一种特殊性!

此处有完整说明:http://www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx