2009-05-01 9 views
7

Bạn có thể lấy đường dẫn ứng dụng trình duyệt mặc định từ RegKey nào?Windows RegKey - Đường dẫn ứng dụng trình duyệt mặc định

Cách tốt nhất để truy cập từ C# /. NET?

+3

Bạn không nên thăm dò sổ đăng ký để thử khởi chạy trình duyệt web mặc định. Bạn đang cố làm gì vậy? – Michael

+0

Tôi không muốn khởi chạy trình duyệt mặc định. Tôi đã có một chương trình mà có thể làm cho một số lựa chọn khác nhau dựa trên sở thích của một người nào đó sở thích trình duyệt là khôn ngoan. – BuddyJoe

Trả lời

16

Dưới đây là chìa khóa bạn muốn:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ http \ shell \ open \ command

Và đây là một cách nhanh chóng registry tutorial for C#, nếu bạn cần nó.

Sửa:

Đối với các thiết lập cho mỗi người dùng, sử dụng này chính:

HKEY_CLASSES_ROOT \ http \ shell \ open \ command

(HKCR có cả máy và người sử dụng cài đặt, người dùng được ưu tiên).

Lưu ý rằng điều này có thể không hoạt động trên Vista. Để biết thêm thông tin, see here.

+0

Nhưng tôi cho rằng bạn có nghĩa là trong HKEY_CURRENT_USER phải không? – BuddyJoe

+0

Không có khóa khớp nào trong HKCU. Xem chỉnh sửa của tôi để biết thêm thông tin. –

+0

tuyệt vời. cảm ơn. – BuddyJoe

1

cho các cửa sổ con đường duyệt 7 mặc định tiết kiệm trong sau registry key

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\ Associations\UrlAssociations\http 

bằng cách sử dụng C# bạn có thể lấy nó như sau -

RegistryKey regkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\shell\\Associations\\UrlAssociations\\http\\UserChoice", false); 

string browser = regkey.GetValue("Progid").ToString(); 
1

Dựa trên câu trả lời của bạn tôi đã viết mẫu mã này mà nên làm những gì bạn muốn (không được kiểm tra)

public static string GetDefaultBrowserPath() 
    { 
     string defaultBrowserPath = null; 
     RegistryKey regkey; 

     // Check if we are on Vista or Higher 
     OperatingSystem OS = Environment.OSVersion; 
     if ((OS.Platform == PlatformID.Win32NT) && (OS.Version.Major >= 6)) 
     { 
      regkey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\shell\\Associations\\UrlAssociations\\http\\UserChoice", false); 
      if (regkey != null) 
      { 
       defaultBrowserPath = regkey.GetValue("Progid").ToString(); 
      } 
      else 
      { 
       regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\IE.HTTP\\shell\\open\\command", false); 
       defaultBrowserPath = regkey.GetValue("").ToString(); 
      } 
     } 
     else 
     { 
      regkey = Registry.ClassesRoot.OpenSubKey("http\\shell\\open\\command", false); 
      defaultBrowserPath = regkey.GetValue("").ToString(); 
     } 

     return defaultBrowserPath; 
    } 
+2

Trên Win7, "Progid" dường như không chứa liên kết. Nó chứa một ID chương trình được tra cứu trong sổ đăng ký theo "HKCR/FetchedProgramId" (với FetchedProgramId chương trình id valut được tìm nạp trước đó). Theo khóa đó, một lần nữa, một "\ shell \ open \ command", trong đó bạn tìm thấy đường dẫn thực tế. – Nyerguds

+0

Điều này dường như không cung cấp đường dẫn trên Windows 10. Nó chỉ trả lại giá trị của IE.HTTP – Fractal

0

Tôi vừa tạo một chức năng cho điều này:

public void launchBrowser(string url) 
    { 
     string browserName = "iexplore.exe"; 
     using (RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice")) 
     { 
      if (userChoiceKey != null) 
      { 
       object progIdValue = userChoiceKey.GetValue("Progid"); 
       if (progIdValue != null) 
       { 
        if(progIdValue.ToString().ToLower().Contains("chrome")) 
         browserName = "chrome.exe"; 
        else if(progIdValue.ToString().ToLower().Contains("firefox")) 
         browserName = "firefox.exe"; 
        else if (progIdValue.ToString().ToLower().Contains("safari")) 
         browserName = "safari.exe"; 
        else if (progIdValue.ToString().ToLower().Contains("opera")) 
         browserName = "opera.exe"; 
       } 
      } 
     } 

     Process.Start(new ProcessStartInfo(browserName, url)); 
    }