使用ie10 c#winform的网络浏览器

使用ie10 c#winform的网络浏览器,c#,winforms,registry,C#,Winforms,Registry,我想强制webbrowser在我的c#winform应用程序中使用IE10。 我知道还有其他类似的问题,但我已经读了很多,我不知道我错在哪里 这是我的代码: RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey (@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true);

我想强制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
在初始化Component()之前,我将其写入主项目的构造函数中。 我在.manifest文件中设置了管理员权限

谢谢大家,布莱克沙瓦纳

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

(@"SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION") 
即使我的指令说:
Registry.LocalMachine.OpenSubKey
(@“SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE\u BROWSER\u EMULATION”,真)

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


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

功能浏览器\u仿真
“myAppName.exe”=10000
(或0x02710),而不是1000

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\BROWSER\u仿真中

HKEY\U LOCAL\u MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\U BROWSER\u EMULATION


它适用于我

你必须说“myAppName.exe”而不是“myAppName”

我遇到了同样的问题,我的应用程序将值写入了“HKEY\U LOCAL\u MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE\u BROWSER\u 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”

注意:如果WebBrowser控件位于DLL中,则需要指定托管EXE的名称,无论该名称是什么,例如
System.AppDomain.CurrentDomain.FriendlyName

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

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

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


如果你想模拟IE的其他版本,你可以简单地用
“IE=EmulateIE9”
“IE=EmulateIE8”
等替换
“IE=EmulateIE10”

你是否尝试过手动设置它以确保它在第一时间工作?你有x86还是x64?windows 8 x64。然而,现在我试图手动设置它,但它不起作用。昨天,在用c#实现代码之前,注册表项(手动设置)运行良好。是否可能是因为程序关闭时我没有编写registrybrowser.Close()?我可以“清理”注册表吗?如果您不
关闭
,您的更改可能不会提交/刷新。。。您需要手动查找条目或尝试注册表清理程序…请确保EXE项目上的平台目标设置为AnyCPU,而不是x86。否则您将写入错误的注册表项。这也关系到你安装了什么版本的IE,以及它是否可以在某些程序中以32位模式使用。查看.NET 4+注册表视图类型。