更改FEATURE_BROWSER_EMULATION注册表项 - VB.NET

时间:2015-02-17 15:15:12

标签: wpf vb.net registry

我们有一个使用浏览器控件的WPF应用。由于这会模拟IE的旧版本,因此大多数网站都无法正确呈现。

通过将“OurApp.exe”的注册表项和值11000添加到HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION \,它可以很好地工作。

问题是 - 我如何检测当前设置(如果有)并根据需要使用VB.NET从应用程序中进行更改?

我可以使用

在本地计算机上返回当前版本的IE
Public Function ReturnIEVersion() As String
    Try
        Dim vVersionO As Object = New System.Windows.Forms.WebBrowser().Version
        Dim vVersion As String = vVersionO.ToString
        Return vVersion
    Catch ex As Exception
        EmailError(ex)
        Return "Error"
    End Try
End Function

然后我只需要将它与任何现有的条目进行比较并根据需要进行更新,我假设一种方法来确定本地机器是64位还是32位(因为注册表路径不同)?

谢谢

2 个答案:

答案 0 :(得分:1)

这个问题是重复的。答案here应该可以解决您的问题!

我已将代码转换为VB:

Private Shared Sub Main()
    If Not mutex.WaitOne(TimeSpan.FromSeconds(2), False) Then
        'another application instance is running
        Return
    End If
    Try

        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)

        Dim targetApplication = Process.GetCurrentProcess().ProcessName + ".exe"
        Dim ie_emulation As Integer = 10000
        Try
            Dim tmp As String = Properties.Settings.[Default].ie_emulation
            ie_emulation = Integer.Parse(tmp)
        Catch
        End Try
        SetIEVersioneKeyforWebBrowserControl(targetApplication, ie_emulation)

        m_webLoader = New FormMain()

        Application.Run(m_webLoader)
    Finally
        mutex.ReleaseMutex()
    End Try
End Sub

Private Shared Sub SetIEVersioneKeyforWebBrowserControl(appName As String, ieval As Integer)
    Dim Regkey As RegistryKey = Nothing
    Try


        Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True)

        'If the path is not correct or 
        'If user't have priviledges to access registry 
        If Regkey Is Nothing Then
            YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION Failed - Registry key Not found")
            Return
        End If

        Dim FindAppkey As String = Convert.ToString(Regkey.GetValue(appName))

        'Check if key is already present 
        If FindAppkey = "" + ieval Then
            YukLoggerObj.logInfoMsg("Application FEATURE_BROWSER_EMULATION already set to " + ieval)
            Regkey.Close()
            Return
        End If

        'If key is not present or different from desired, add/modify the key , key value 
        Regkey.SetValue(appName, CInt(ieval), RegistryValueKind.DWord)

        'check for the key after adding 
        FindAppkey = Convert.ToString(Regkey.GetValue(appName))

        If FindAppkey = "" + ieval Then
            YukLoggerObj.logInfoMsg("Application FEATURE_BROWSER_EMULATION changed to " + ieval + "; changes will be visible at application restart")
        Else
            YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION setting failed; current value is  " + ieval)



        End If
    Catch ex As Exception

        YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION setting failed; " + ex.Message)
    Finally
        'Close the Registry 
        If Regkey IsNot Nothing Then
            Regkey.Close()
        End If
    End Try


End Sub

答案 1 :(得分:0)

原帖询问设定HKCU值,但我相信该代码正试图设定HKLM的值。这会导致权限问题。

要设置HKLM的值,应在安装例程期间进行更改,该例程将在所需的提升凭据下执行。

要在运行时设置该值,则应将HKCU值设置为HKLM值。 HKCU值的优点是不关心应用程序的“位数”,而对于HKLM值,“位数”将决定是否应在WOW6432Node下添加条目。

相关问题