2012-05-08 13 views

Respuesta

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

Process.Start ([su URL]) es de hecho la respuesta, en todos los casos, pero muy de nicho. Para completar, sin embargo, mencionaré que nos topamos con un caso tan específico hace un tiempo: si está intentando abrir un url "file: \" (en nuestro caso, para mostrar la copia local instalada de nuestra webhelp), al lanzar desde el shell, los parámetros de la url fueron descartados.

Nuestra solución en lugar hacker, que no recomiendo a menos que encuentre un problema con la solución "correcta", parecía algo como esto:

En el controlador de clic del botón:

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(); 

la función fea que no se debe utilizar a menos Process.Start ([su URL]) no hace lo que se puede esperar que va a:

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

gracias por la información adicional –

+1

Esto es extremadamente agradable codificación – BoundForGlory

+1

Esta respuesta podría utilizar una actualización para incluir Win8 y Win10. (Si alguien termina implementándolo, edite esta respuesta para incluirlo). – ANeves

Cuestiones relacionadas