使用IE10的C# WinForm网页浏览器

5
我希望在我的C# Winform应用程序中强制Web浏览器使用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()之前的我的主要项目构造函数中编写了它。

我已经在.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模式下运行我的程序,进入属性/生成/x64,它将不会在我的原始路径中写入键。

你试过手动设置以确保它能正常工作吗? - bash.d
你有x86还是x64? - bash.d
Windows 8 x64。但是现在我尝试手动设置它,但它不起作用。昨天,在实现C#代码之前,注册表键(手动设置)运行良好。这可能是因为当我的程序关闭时我没有编写registrybrowser.Close()吗?我能“清理”注册表吗? - BlackShawarna
如果您不进行“关闭”操作,可能无法提交/刷新您所做的更改... 您需要手动查找您的条目或尝试使用注册表清理工具... - bash.d
请确保您的EXE项目的平台目标设置为AnyCPU而不是x86,否则将会写入错误的注册表键。此外,安装的IE版本以及它是否在某些程序中以32位模式使用也很重要。请查看.NET 4+ RegistryView类型。 - Hans Passant
显示剩余2条评论
4个回答

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"

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


3

FEATURE_BROWSER_EMULATION是一个与Internet Explorer浏览器兼容性相关的设置。在注册表路径和中,你可以设置应用程序的浏览器模式。通过设置"myAppName.exe"=10000(或0x02710),而不是1000,可以确保应用程序在兼容性最高的IE10标准模式下运行。这个方法对我很有效。


0
如果您可以控制正在呈现的页面(例如内部网页)以及使用WebBrowser控件呈现页面的应用程序,则可以在页面中指定一个meta标签。
<meta http-equiv="X-UA-Compatible" content="IE=10" />

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

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接