Ho visto la risposta di Veer. Penso che sia giusto, ma non ha funzionato per me. Forse sto usando .NET 4 e sto usando il sistema operativo 64x, quindi controlla gentilmente questo.
Puoi metterlo in configurazione o controllarlo all'avvio della tua applicazione:
private void Form1_Load(object sender, EventArgs e)
{
var appName = Process.GetCurrentProcess().ProcessName + ".exe";
SetIE8KeyforWebBrowserControl(appName);
}
private void SetIE8KeyforWebBrowserControl(string appName)
{
RegistryKey Regkey = null;
try
{
if (Environment.Is64BitOperatingSystem)
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
else
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
if (Regkey == null)
{
MessageBox.Show("Application Settings Failed - Address Not found");
return;
}
string FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
{
MessageBox.Show("Required Application Settings Present");
Regkey.Close();
return;
}
if (string.IsNullOrEmpty(FindAppkey))
Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);
FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
MessageBox.Show("Application Settings Applied Successfully");
else
MessageBox.Show("Application Settings Failed, Ref: " + FindAppkey);
}
catch (Exception ex)
{
MessageBox.Show("Application Settings Failed");
MessageBox.Show(ex.Message);
}
finally
{
if (Regkey != null)
Regkey.Close();
}
}
Potresti trovare messagebox.show, solo per testare.
Le chiavi sono le seguenti:
11001 (0x2AF9) - Internet Explorer 11. Le pagine Web vengono visualizzate in modalità edge IE11, indipendentemente dalla !DOCTYPE
direttiva.
11000 (0x2AF8) - Internet Explorer 11. Le pagine web contenenti !DOCTYPE
direttive basate su standard vengono visualizzate in modalità edge IE11. Valore predefinito per IE11.
10001 (0x2711) - Internet Explorer 10. Le pagine Web vengono visualizzate in modalità standard IE10, indipendentemente dalla !DOCTYPE
direttiva.
10000 (0x2710) - Internet Explorer 10. Le pagine Web contenenti !DOCTYPE
direttive basate su standard
vengono visualizzate in modalità IE10 Standards. Valore predefinito per Internet Explorer 10.
9999 (0x270F) - Internet Explorer 9. Le pagine web vengono visualizzate in modalità standard IE9, indipendentemente dalla !DOCTYPE
direttiva.
9000 (0x2328) - Internet Explorer 9. Le pagine Web contenenti !DOCTYPE
direttive basate su standard vengono visualizzate in modalità IE9.
8888 (0x22B8) - Le pagine web vengono visualizzate in modalità IE8 Standards, indipendentemente dalla !DOCTYPE
direttiva.
8000 (0x1F40) - Le pagine web contenenti !DOCTYPE
direttive basate su standard vengono visualizzate in modalità IE8.
7000 (0x1B58) - Le pagine web contenenti !DOCTYPE
direttive basate su standard vengono visualizzate in modalità IE7 Standards.
Riferimento: MSDN: Internet Feature Controls
Ho visto applicazioni come Skype usare 10001. Non lo so.
NOTA
L'applicazione di installazione cambierà il registro. Potrebbe essere necessario aggiungere una riga nel file manifest per evitare errori dovuti alle autorizzazioni di modifica nel registro:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
AGGIORNAMENTO 1
Questa è una classe che otterrà l'ultima versione di IE su Windows e apporterà le modifiche come dovrebbero essere;
public class WebBrowserHelper
{
public static int GetEmbVersion()
{
int ieVer = GetBrowserVersion();
if (ieVer > 9)
return ieVer * 1000 + 1;
if (ieVer > 7)
return ieVer * 1111;
return 7000;
}
public static void FixBrowserVersion()
{
string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
FixBrowserVersion(appName);
}
public static void FixBrowserVersion(string appName)
{
FixBrowserVersion(appName, GetEmbVersion());
}
public static void FixBrowserVersion(string appName, int ieVer)
{
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
}
private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
{
try
{
if (Environment.Is64BitOperatingSystem)
Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
else
Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
}
catch (Exception)
{
}
}
public static int GetBrowserVersion()
{
string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };
int maxVer = 0;
for (int i = 0; i < ls.Length; ++i)
{
object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
string strVal = System.Convert.ToString(objVal);
if (strVal != null)
{
int iPos = strVal.IndexOf('.');
if (iPos > 0)
strVal = strVal.Substring(0, iPos);
int res = 0;
if (int.TryParse(strVal, out res))
maxVer = Math.Max(maxVer, res);
}
}
return maxVer;
}
}
utilizzo della classe come segue
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
potresti dover affrontare un problema per la comparabilità di Windows 10, potrebbe essere necessario aggiungere questo meta tag a causa del tuo sito web stesso
<meta http-equiv="X-UA-Compatible" content="IE=11" >
Godere :)