webbrowser使用ie10 c#winform

时间:2013-04-05 08:38:19

标签: c# winforms registry

我想强制webbrowser在我的c#winform应用程序中使用IE10。 我知道还有其他这样的问题,但我已经阅读了很多这些问题,我不知道我哪里错了。

这是我的代码:

RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey
           (@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);
        registrybrowser.SetValue("myAppName", 0x02710, RegistryValueKind.DWord); //Even with QWord

我尝试过不同的方法来设置值:

registrybrowser.SetValue("myAppName", 1000, RegistryValueKind.DWord); //Even with QWord and String
registrybrowser.SetValue("myAppName", 1000); //even with 0x02710

我在InitializeComponent()之前在主项目的costructor中写了它。 我在.manifest文件中设置了管理员权限

感谢所有人,BlackShawarna

编辑:我发现了RegistryKey.SetValue(...);在另一条路径中创建了一个密钥:

(@"SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION") 

即使我的指示说:Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);

我认为这是因为IE10适用于32位模式。但是我不明白为什么它写在那条路径中,即使我指定了另一条路径,最重要的是,即使我打开Registry.LocalMachine.OpenSubKey(@“Software \ Wow6432Node ....”),为什么我的应用程序无法工作。 );

如果我只在x64模式下运行我的程序,转到properties / build / x64,它将不会在我的原始路径中写入密钥。

4 个答案:

答案 0 :(得分:9)

我有同样的问题,我的应用程序将值写入“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION”。

我将LocalMachine更改为CurrentUser,现在可以正常工作。

string executablePath = Environment.GetCommandLineArgs()[0];
string executableName = System.IO.Path.GetFileName(executablePath);

RegistryKey registrybrowser = Registry.CurrentUser.OpenSubKey
   (@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);

if (registrybrowser == null)
{
    RegistryKey registryFolder = Registry.CurrentUser.OpenSubKey
        (@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl", true);
    registrybrowser = registryFolder.CreateSubKey("FEATURE_BROWSER_EMULATION");
}
registrybrowser.SetValue(executableName, 0x02710, RegistryValueKind.DWord);
registrybrowser.Close();

executableName类似于“myAppName.exe”

注意:如果DLL内的WebBrowser控件需要指定托管EXE的名称,例如System.AppDomain.CurrentDomain.FriendlyName

答案 1 :(得分:3)

FEATURE_BROWSER_EMULATION "myAppName.exe"=10000(或0x02710)而不是1000。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

它对我有用

答案 2 :(得分:0)

你必须说'myAppName.exe'而不是'myAppName'

答案 3 :(得分:0)

如果您可以控制正在呈现的页面(例如内联网页面)以及使用WebBrowser控件呈现页面的应用程序,您可以在页面中指定元标记< / p>

<meta http-equiv="X-UA-Compatible" content="IE=10" />

并根据需要使用WebBrowser控件。您必须在计算机上安装IE 10。

如果您想模仿其他版本的IE,只需将"IE=10"替换为"IE=EmulateIE9""IE=EmulateIE8"等。