2012-06-12 5 views
6

Tôi đang sử dụng này để có được đường dẫn và thực thi của trình duyệt web mặc định:Mở một file html bằng trình duyệt web mặc định

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

Và:

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

Sau đó tôi gọi là trình duyệt web: Run(DefaultWebBrowser, "foo.html")

Câu hỏi đặt ra là: Tôi gặp sự cố, chức năng trên đang gọi firefox và IE (hai trình duyệt web được cài đặt trên máy của tôi) thay vì Internet Explorer, trình duyệt web mặc định. Tôi ko có ý tưởng nào để sửa nó. Bất kỳ trợ giúp là rất đánh giá cao. Cảm ơn trước.

EDIT

Tôi đã tải và cài đặt Google Chrome, thiết lập nó như là trình duyệt web mặc định, nhưng kỳ quặc lỗi trên không xảy ra với nó.

Trả lời

24

Bạn có thể thay thế tất cả những gì mã với

System.Diagnostics.Process.Start(pathToHtmlFile); 

này sẽ tự động khởi động trình duyệt mặc định của bạn, hay đúng hơn là tìm kiếm các xử lý mặc định cho .htm hoặc .html tập tin và sử dụng đó.

Bây giờ với Firefox được đặt làm mặc định, điều này đôi khi có thể gây ra ngoại lệ lạ (tôi nghĩ nếu Firefox bắt đầu lần đầu tiên), vì vậy bạn có thể muốn thực hiện try/catch để xử lý điều đó.

+2

Tôi đã thử nó. Nhưng trong một số chiếc .htm/.html không được mở bằng trình duyệt web. các phần mở rộng .htm/.html có thể được liên kết với một trình soạn thảo văn bản hoặc IDE chẳng hạn. – Jack

+0

Mặc dù chương trình mặc định _can_ được thay đổi, bạn không nên gặp sự cố thực sự. Xem [this] (http://support.microsoft.com/kb/224816) để biết một số mẹo về cách sử dụng 'ShellExecute' để khởi chạy trình duyệt web mặc định và cũng là đường dẫn cho một số khóa registry (mà bạn có thể đã biết của). Cuối cùng, người dùng hầu như có thể can thiệp bằng cách thay đổi một số chương trình mặc định ... nhưng bạn không nên lo lắng quá nhiều về điều này, vì nó không thể tránh khỏi ở một mức độ nhất định. – Spooky

+1

Như Jack đã nói, đây là một ý tưởng khủng khiếp. Cá nhân tôi có một trình soạn thảo được đặt làm ứng dụng mặc định để mở các tệp HTML và không cần phải kết thúc để xem các chương trình mở tệp readme của họ trong trình chỉnh sửa đó thay vì trình duyệt mặc định. Có sự khác biệt giữa 'trình duyệt mặc định' và 'ứng dụng mặc định để mở HTML bằng' trong Windows. – Nyerguds

0

Đối với những người không có hiệp hội html mặc định để trình duyệt, sử dụng

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

+0

Giả định rằng người dùng đã cài đặt trình duyệt chrome. – Jack

+0

Mã cho DefaultWebBrowser được đưa ra ở đầu trang –

+0

Quay lại để sử dụng mã đó nếu bạn muốn nó chung chung hơn (xin lỗi giả định nó là hiển nhiên). –

0

Im sử dụng một mã số, nơi mà tôi nhìn lên cho các tập tin exe đầu tiên. Ví dụ, nếu exsists chrome.exe (trong đường dẫn mặc định của nó) khác nếu tồn tại firefox.exe hoặc launcher.exe (cho opera) vv ... nếu không tồn tại bất kỳ, hãy thử chạy iexplore.exe với tham số pathToHtmlFile. Đây là giải pháp của tôi, nơi tôi sử dụng cấu hình bên ngoài, nơi một bộ trình duyệt của tôi, không quan trọng những gì được thiết lập mặc định trong hệ điều hành.