2012-05-08 21 views

Odpowiedz

57
Process.Start("http://www.google.com"); 
19

Process.Start ([twój adres URL)) jest rzeczywiście odpowiedzią, we wszystkich przypadkach poza wyjątkowo niszowymi. Dla kompletności wspomnę jednak, że pewnego razu natknęliśmy się na taki niszowy przypadek: jeśli próbujesz otworzyć URL pliku "file: \" (w naszym przypadku, aby wyświetlić lokalną zainstalowaną kopię naszej strony internetowej), podczas uruchamiania z powłoki, parametry do adresu URL zostały odrzucone.

Nasz raczej hackish rozwiązanie, które nie polecam, chyba że wystąpi problem z „właściwej” rozwiązanie, wyglądała mniej więcej tak:

w obsługi kliknij na przycisk:

string browserPath = GetBrowserPath(); 
if (browserPath == string.Empty) 
    browserPath = "iexplore"; 
Process process = new Process(); 
process.StartInfo = new ProcessStartInfo(browserPath); 
process.StartInfo.Arguments = "\"" + [whatever url you're trying to open] + "\""; 
process.Start(); 

brzydki funkcja że nie powinno się używać, chyba Process.Start ([Twój url]) nie robi tego, co można oczekiwać, że będzie:

private static string GetBrowserPath() 
{ 
    string browser = string.Empty; 
    RegistryKey key = null; 

    try 
    { 
     // try location of default browser path in XP 
     key = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false); 

     // try location of default browser path in Vista 
     if (key == null) 
     { 
      key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", false); ; 
     } 

     if (key != null) 
     { 
      //trim off quotes 
      browser = key.GetValue(null).ToString().ToLower().Replace("\"", ""); 
      if (!browser.EndsWith("exe")) 
      { 
       //get rid of everything after the ".exe" 
       browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4); 
      } 

      key.Close(); 
     } 
    } 
    catch 
    { 
     return string.Empty; 
    } 

    return browser; 
} 
+0

dzięki za dodatkową informacją jest to –

+1

niezwykle ładne kodowanie – BoundForGlory

+1

Ta odpowiedź może użyć aktualizacji, aby uwzględnić Win8 i Win10. (Jeśli ktoś kończy implementację, edytuj tę odpowiedź, aby ją uwzględnić!) – ANeves

Powiązane problemy