2012-06-12 23 views
6

estoy usando esto para obtener la ruta y el ejecutable del navegador web por defecto:Abrir un archivo HTML utilizando el navegador web por defecto

public static string DefaultWebBrowser 
     { 
      get 
      { 

       string path = @"\http\shell\open\command"; 

       using (RegistryKey reg = Registry.ClassesRoot.OpenSubKey(path)) 
       { 
        if (reg != null) 
        { 
         string webBrowserPath = reg.GetValue(String.Empty) as string; 

         if (!String.IsNullOrEmpty(webBrowserPath)) 
         { 
          if (webBrowserPath.First() == '"') 
          { 
           return webBrowserPath.Split('"')[1]; 
          } 

          return webBrowserPath.Split(' ')[0]; 
         } 
        } 

        return null; 
       } 
      } 
     } 

Y:

protected static bool Run(string FileName, string Args) 
     { 
      try 
      { 
       Process proc = new Process(); 

       processInfo.FileName = FileName; 
       proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 

       if(Args != null) proc.StartInfo.Arguments = Args; 

       proc.Start(); 

       return true; 
      } 
      catch (Exception) { } 

      return false; 
     } 

Entonces me llaman el navegador web: Run(DefaultWebBrowser, "foo.html")

La pregunta es: Tengo un problema, la función anterior es llamar a Firefox e IE (los dos navegadores web instalados en mi pc) en lugar de Internet Explorer, el navegador web predeterminado. No tengo idea de cómo arreglar esto. Se agradece mucho cualquier ayuda. Gracias por adelantado.

EDITAR

he descargado e instalado el Google Chrome, como navegador web por defecto, pero curiosamente el error anterior no sucede con él.

Respuesta

24

Puede reemplazar todo ese código con

System.Diagnostics.Process.Start(pathToHtmlFile); 

Esto iniciará automáticamente el navegador por defecto, o más bien buscar el controlador predeterminado para .htm o .html archivos y usar eso.

Ahora con Firefox configurado como predeterminado, esto a veces puede causar excepciones raras (creo que si Firefox está comenzando por primera vez), por lo que es posible que desee hacer un try/catch para manejar eso.

+2

Lo había intentado. Pero en algunas PC .htm/.html no se abren con un navegador web. las extensiones .htm/.html se pueden asociar con un editor de texto o IDE, por ejemplo. – Jack

+0

Aunque se puede cambiar el programa predeterminado _no_, realmente no deberías tener un problema. Consulte [this] (http://support.microsoft.com/kb/224816) para obtener algunos consejos sobre el uso de 'ShellExecute' para iniciar el navegador web predeterminado, y también las rutas para algunas claves de registro (que probablemente ya sepa de). Al final, el usuario puede muy probablemente intervenir cambiando algunos programas predeterminados ... pero no debe preocuparse demasiado por esto, ya que es inevitable en cierta medida. – Spooky

+1

Como dijo Jack, esta es una idea terrible. Personalmente, tengo un editor configurado como aplicación predeterminada para abrir archivos HTML, y me inquieta que los programas abren su archivo Léame en ese editor en lugar del navegador predeterminado. Hay una diferencia entre 'navegador predeterminado' y 'aplicación predeterminada para abrir HTML con' en Windows. – Nyerguds

0

Para aquellos que no tienen asociación predeterminada html en un navegador, utilice

System.Diagnostics.Process.Start("Chrome", Uri.EscapeDataString(pathToHtmlFile))

+0

Supone que el usuario tiene el navegador Chrome instalado. – Jack

+0

El código para DefaultWebBrowser se proporciona en la parte superior de la página –

+0

Volver a utilizar ese código si lo quiere más genérico (lo siento asumió que era obvio). –

0

Im usando un código, donde miro hacia arriba para archivos ejecutables por primera vez. Por ejemplo, si exs chrome.exe (en su ruta predeterminada) else si existe firefox.exe o launcher.exe (para opera) etc ... si no existe, intente ejecutar iexplore.exe con el parámetro pathToHtmlFile. Esta es mi solución, donde utilizo configuración externa, donde un conjunto de mi navegador, no importa lo que se establece por defecto en el sistema operativo.

Cuestiones relacionadas