Webbrowser控件忽略FEATURE_BROWSER_EMULATION注册表项。

4
我正在使用.NET的WebBrowser控件开发自定义浏览器解决方案。 为了禁用IE兼容性视图,我设置了注册表项Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION: [Sreenshot regedit] http://zbirk.mirk.at/browserreg.png "截屏" 我尝试使用以下值:dword=8000,dword=8888,dword=9000,但WebBrowser控件似乎忽略这些注册表项。 也许有人也遇到了这个问题并能帮助我。

1
当在调试器中运行VS2010 x64时,此问题会一直出现。但是,在发布应用程序并运行.exe之后,您所描述的注册表设置会正确生效。 - pgfearo
8001,9001将正常工作,因为它们不依赖于文档类型。 - Sivaraman
5个回答

3
WebBrowser控件绝对尊重这些键。
请记住,虽然任务管理器可能会在名称列中显示application.exe,但如果您正在调试exe,则名称为application.vshost.exe。
因此,在我的应用程序中,我每次运行应用程序时都尝试创建该密钥。如果无法创建它(因为它已经存在),则继续运行;如果创建了该密钥,则通知用户需要重新启动应用程序。

2

请确保您没有在vshost中运行

应用程序名称将不同,例如appname.vshost.exe


1

谢谢您的回复,现在它正在工作。

这是我的可用代码:

public void setIEcomp()
    {
        String appname = Process.GetCurrentProcess().ProcessName+".exe";
        RegistryKey RK8 = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",RegistryKeyPermissionCheck.ReadWriteSubTree);            
        int value9 = 9999;
        int value8 = 8888;
        Version ver = webBrowser1.Version;
        int value = value9;
        try
        {
            string[] parts = ver.ToString().Split('.');
            int vn = 0;
            int.TryParse(parts[0], out vn);
            if (vn != 0)
            {
                if (vn == 9)
                    value = value9;
                else
                    value = value8;
            }
        }
        catch
        {
            value = value9;
        }
        //Setting the key in LocalMachine
        if (RK8 != null)
        {
            try
            {
                RK8.SetValue(appname, value, RegistryValueKind.DWord);
                RK8.Close();
            }
            catch(Exception ex)
            {
                //MessageBox.Show(ex.Message);
            }
        }
    }

1
如果您已经解决了问题,应该接受某个答案。您解决了吗? - Coder12345
我想知道您最初是否使用regedit编辑了64位视图的注册表。当您切换到以编程方式设置键时,它可以工作,因为您的程序正在编辑注册表的32位视图。 - Wallace Kelly

1
我也没能看出FEATURE_BROWSER_EMULATION对我的应用程序有任何影响。
我通过手动编辑regedit来测试FEATURE_BROWSER_EMULATION功能。但是我所做的一切都没有任何区别。我的托管页面仍然无法加载任何新的JavaScript和外部库。
我找到了我的错误:
我正在使用regedit编辑64位视图的注册表。我的应用程序正在作为32位应用程序运行,并查看注册表的32位视图。这就是为什么我的注册表更改似乎对我的应用程序没有影响的原因。顺便说一下,WPF项目模板默认为“Prefer 32-bit”。
在Wow6432Node键中手动使用regedit进行编辑可以解决问题:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
当然,通过编程方式设置DWORD值也可以解决问题,因为您的32位应用程序将在Wow6432Node内进行编辑。

大家都在谈论vhost,这正是我正在寻找的,谢谢啊。 - Akash Shrivastava

0

一个旧帖子和解决方案已经不准确了。

运行 procmon 并观察 FEATURE_BROWSER_EMULATION,可以看到实际检查了以下注册表变量。这是针对 WINWORD.exe 的,但除此之外 - 随你喜欢...

HKU\S-1-5-21-[我的-SID-禁止触碰]\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\WINWORD.EXE

HKU\S-1-5-21-[我的-SID-禁止触碰]\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION*

HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION(Default)

HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\WINWORD.EXE

HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\WINWORD.EXE

HKLM\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION*

HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION*

这段内容与编程有关。


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