2012-06-12 4 views
6

Я использую это, чтобы получить путь и исполняемый файл веб-браузер по умолчанию:Открыть HTML-файл с помощью веб-браузер по умолчанию

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; 
       } 
      } 
     } 

И:

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; 
     } 

Затем я называю веб-браузер: Run(DefaultWebBrowser, "foo.html")

Вопрос: У меня проблема. Вышеупомянутая функция вызывает firefox и IE (два веб-браузера, установленные на моем компьютере), а не Internet Explorer, веб-браузер по умолчанию. Я не знаю, как это исправить. Любая помощь очень ценится. Заранее спасибо.

EDIT

Я скачал и установил Google Chrome, установите его в качестве веб-браузера по умолчанию, но странно выше ошибка не происходит с ним.

ответ

24

Вы можете заменить весь код с

System.Diagnostics.Process.Start(pathToHtmlFile); 

это автоматически запустит ваш браузер по умолчанию, или, скорее, искать обработчик по умолчанию для .htm или .html файлов и использовать.

Теперь, когда Firefox установлен как значение по умолчанию, это может иногда вызывать странные исключения (я думаю, если Firefox запускается в первый раз), так что вы можете сделать try/catch на нем, чтобы справиться с этим.

+2

Я пробовал. Но в некоторых ПК .htm/.html не открывается с помощью веб-браузера. расширения .htm/.html могут быть связаны с текстовым редактором или IDE, например. – Jack

+0

Хотя программа по умолчанию _can_ должна быть изменена, у вас не должно быть проблем. См. [This] (http://support.microsoft.com/kb/224816) для получения некоторых советов по использованию 'ShellExecute' для запуска веб-браузера по умолчанию, а также путей для некоторых разделов реестра (которые вы, вероятно, уже знаете из). В конце концов, пользователь может, скорее всего, вмешаться, изменив некоторые программы по умолчанию ... но вы не должны слишком беспокоиться об этом, поскольку это неизбежно в определенной степени. – Spooky

+1

Как сказал Джек, это ужасная идея. У меня лично есть редактор, установленный как приложение по умолчанию для открытия HTML-файлов, и это меня не разочаровывает, когда программы открывают файл readme в этом редакторе вместо браузера по умолчанию. Существует различие между «браузером по умолчанию» и «стандартным приложением для открытия HTML с» в Windows. – Nyerguds

0

Для тех, кто не имеет связи HTML по умолчанию в браузере, используйте

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

+0

Предполагается, что у пользователя установлен Chrome-браузер. – Jack

+0

Код для DefaultWebBrowser указан в верхней части страницы. –

+0

Вернитесь к использованию этого кода, если вы хотите, чтобы он был более общим (извините, что это было очевидно). –

0

Im, используя код, где я посмотреть на исполняемые файлы первой. Например, если exsists chrome.exe (в своем пути по умолчанию) else, если существует firefox.exe или launcher.exe (для opera) и т. Д., Если он не существует, попробуйте запустить iexplore.exe с параметром pathToHtmlFile. Это мое решение, где я использую внешнюю конфигурацию, где установлен мой браузер, не имеет значения, что установлено по умолчанию в ОС.