我们有一个使用浏览器控件的WPF应用。由于这会模拟IE的旧版本,因此大多数网站都无法正确呈现。
通过将“OurApp.exe”的注册表项和值11000添加到HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION \,它可以很好地工作。
问题是 - 我如何检测当前设置(如果有)并根据需要使用VB.NET从应用程序中进行更改?
我可以使用
在本地计算机上返回当前版本的IEPublic 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位(因为注册表路径不同)?
谢谢
答案 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下添加条目。