2012-08-17 63 views
5

Tôi đang tạo một tiện ích WPF cần truy cập vào sổ đăng ký của máy cục bộ, sau đó tìm đường dẫn cài đặt của chương trình.Lấy đường dẫn cài đặt tệp từ sổ đăng ký

Tôi đã điều hướng đến khóa thông qua Regedit và nó cung cấp Tên, Loại và Dữ liệu, trong Dữ liệu hiển thị đường dẫn cài đặt, tôi muốn trích xuất đường dẫn cài đặt.

Tôi biết tôi cần phải điều hướng đến phím này trong registry:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \

sau đó tôi cần phải truy cập vào một thư mục trong phím này với thông tin về đường dẫn cài đặt.

-

+0

tôi chỉ muốn đọc chìa khóa, để sau đó trích xuất đường dẫn cài đặt chương trình cụ thể. – LouisColeman

+0

Khi bạn đã đưa ra câu trả lời, vui lòng đăng câu trả lời dưới dạng câu trả lời thay vì chỉnh sửa câu hỏi gốc. =) –

+0

trong hầu hết các trường hợp truy cập vào sổ đăng ký được khuyến khích, hầu hết những gì bạn cần có thể được tìm thấy trong các lớp Ứng dụng & Môi trường, https://msdn.microsoft.com/en-us/library/system.windows.application(v = vs.110) .aspx https://msdn.microsoft.com/en-us/library/system.environment(v=vs.110).aspx hoặc sử dụng configfile – MikeT

Trả lời

10

Tôi giải quyết được vấn đề của mình, với bất kỳ ai muốn có giải pháp trong tương lai nếu bạn vẫn bị kẹt sau này, hãy nhắn tin cho tôi, tôi thấy khó tìm được tài nguyên.

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths\myexe.exe"); 
string regFilePath = null; 

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

Cảm ơn bạn đã trả lời hữu ích. 'key' nên được xử lý để giải phóng xử lý hệ thống được kết hợp với một RegistryKey mở. Bạn có thể sử dụng 'key' trong câu lệnh 'using'. – Ron

0

Câu hỏi này rất hữu ích cho tôi. Tôi đã đưa ra một lớp trợ giúp, muốn chơi với các Tuple mới.

sử dụng Ví dụ:

public string SkypeExePath => InstalledApplicationPaths.GetInstalledApplicationPath("lync.exe"); 

Lớp:

public static class InstalledApplicationPaths 
{ 

    public static string GetInstalledApplicationPath(string shortName) 
    { 
     var path = GetInstalledApplicationPaths().SingleOrDefault(x => x?.ExectuableName.ToLower() == shortName.ToLower())?.Path; 
     return path; 
    } 

    public static IEnumerable<(string ExectuableName, string Path)?> GetInstalledApplicationPaths() 
    { 
     using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths")) 
     { 
     foreach (var subkeyName in key.GetSubKeyNames()) 
     { 
      using (RegistryKey subkey = key.OpenSubKey(subkeyName)) 
      { 
       yield return (subkeyName, subkey.GetValue("")?.ToString()); 
      } 
     } 
     } 
    } 

} 
Các vấn đề liên quan