2010-05-09 12 views
11

Tengo una URL y deseo iniciarla en el navegador predeterminado. He intentado dos métodos:¿Cómo abro un navegador web desde un programa .NET? Process.Start() no está funcionando?

Process.Start("http://stackoverflow.com"); 

... y el que se detalla en este other question usando ShellExecute.

En ambos casos aparece el error: Windows no puede encontrar 'http://stackoverflow.com'. Asegúrese de escribir el nombre correctamente, y luego intente de nuevo.

No debería tratar de abrirlo como un archivo aunque ... por lo que entiendo, debe reconocerlo como una URL y abrirlo en el navegador predeterminado. ¿Qué me estoy perdiendo?

Por cierto: OS = Vista y .NET = 3,5

EDITAR:

Según this MS KB article, ya que establece el Process.Start UseShellExecute por defecto, se debe iniciar el navegador por defecto.

EDITAR:

Esto es lo que hace el trabajo:

System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\IExplore.exe", "http://stackoverflow.com"); 

desgracia que realmente no se inicia el navegador por defecto, y también no funciona si el IE no está instalado en el lugar "normal". No estoy seguro de qué hacer aquí.

Más información:

OK, por lo que el error que estoy recibiendo es el número de error -2147467259. Al mirar a Google por esto, parece que no es muy descriptivo. Puede ser un error de asociación de archivos o algo así.

La trama se complica:

lo que he comprobado la clave de registro que se supone que tiene mi asociación de archivos para http:

KEY_CLASSES_ROOT\http\shell\open\command\default 

Aquí es el valor:

"C:\Program Files\Mozilla Firefox\firefox.exe" -requestPending -osint -url "%1" 

Eso hace sentido. De hecho, copié esta cadena en un símbolo del sistema y reemplacé el% 1 con http://stackoverflow.com y funcionó y abrió Firefox. Simplemente no entiendo por qué Process.Start no es asociar la URL con este comando ...

+0

Me pregunto si funciona mejor para las URL, incluido el nombre de archivo y la extensión. Pruébelo con "http://msdn.microsoft.com/en-us/default.aspx". –

+0

Por cierto, no codifique "Archivos de programa" porque es diferente si la versión de Windows no está en inglés. –

+0

@ M28: Eso es lo que dije, ¿no es así? –

Respuesta

0

Bueno, misteriosamente comenzó a funcionar correctamente sin cambiar nada. No puedo explicarlo. Sin embargo, mientras tanto, escribí otro método para encontrar y ejecutar el navegador predeterminado. Es un poco hacky, pero mucho mejor que sólo la carga de IE por defecto:

bool success = false; 
RegistryKey httpKey = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command"); 
if (httpKey != null && httpKey.GetValue(string.Empty) != null) 
{ 
    string cmd = httpKey.GetValue(string.Empty) as string; 
    if (cmd != null) 
    { 
     try 
     { 
      if (cmd.Length > 0) 
      { 
       string[] splitStr; 
       string fileName; 
       string args; 
       if (cmd.Substring(0,1) == "\"") 
       { 
        splitStr = cmd.Split(new string[] { "\" " }, StringSplitOptions.None); 
        fileName = splitStr[0] + "\""; 
        args = cmd.Substring(splitStr[0].Length + 2); 
       } 
       else 
       { 
        splitStr = cmd.Split(new string[] { " " }, StringSplitOptions.None); 
        fileName = splitStr[0]; 
        args = cmd.Substring(splitStr[0].Length + 1); 
       } 
       System.Diagnostics.Process.Start(fileName, args.Replace("%1","http://stackoverflow.com")); 
       success = true; 
      } 
     } 
     catch (Exception) 
     { 
      success = false; 
     } 
    } 
    httpKey.Close(); 
} 
1

Trate

Process.Start("IExplore.exe http://www.stackoverflow.com"); 

Esto abrirá Internet Explorer y la URL. Process.Start no detecta aplicaciones/navegadores automaticall.y

+0

Consulte mi edición –

+0

Me sale el mismo error al usar su método . –

+3

Creo que esta es una mala práctica. No dependa de IE de una manera tan cruda si hay una manera fácil y mejor. – mafu

7

Esto funciona para mí:

Process proc = new Process(); 
proc.StartInfo.UseShellExecute = true; 
proc.StartInfo.FileName = "http://stackoverflow.com"; 
proc.Start(); 

No se olvide UseShellExecute si desea utilizar el reconocimiento automático del tipo de comando (en este caso, http/navegador).

Editar: ¿Funciona si Win+R la url?

+0

Esto es idéntico al método que estoy usando. Simplemente llamando a Process.Start establece UseShellExecute de forma predeterminada (consulte el artículo de KB que he vinculado en mi pregunta). –

+0

De hecho, MSDN también está de acuerdo con el artículo de KB. Estoy confundido. Esto tiene que funcionar. ¿Tu URL es realmente correcta? ¿Juego de navegador predeterminado? ¿Funciona el código en esta respuesta o resulta en el mismo mensaje? Raymond al rescate! – mafu

+0

Da el mismo mensaje (ese es realmente el código que probé primero). Estoy pensando que tiene que haber un problema de asociación de archivos en mi máquina. Estoy tratando de encontrar la forma de solucionarlo. –

1

Este es un problema grave que vi cuando Firefox es el navegador web por defecto.

Si utilizamos System.Windows.Forms.Help.ShowHelp (null, "http://microsoft.com"), dicho mensaje de error se puede solucionar en Windows. Sin embargo, Help.ShowHelp no funciona como se esperaba, en Mono/openSUSE.

Cuestiones relacionadas