2012-08-17 92 views
5

我正在創建一個WPF實用程序,它需要訪問本地計算機的註冊表,然後找出程序的安裝路徑。從註冊表中檢索文件安裝路徑

我已經導航到通過Regedit的鍵,它給出了一個名稱,類型和數據,它顯示了數據中的安裝路徑,我想提取安裝路徑。

我知道我需要定位到註冊表中的此項:

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows \ CurrentVersion \ App路徑\

那麼我就需要這個鍵與內訪問文件夾有關安裝路徑的信息。

-

+0

我只想讀出的鍵,然後提取的特定程序的安裝路徑。 – LouisColeman 2012-08-17 15:47:56

+0

當您想出答案時,請將其作爲一個答案發布,而不是編輯原始問題。 =) – 2012-08-20 13:12:16

+0

在大多數情況下訪問註冊表是不鼓勵的,大部分你需要的可以在應用程序和環境類中找到,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或使用配置文件 – MikeT 2016-11-24 12:07:29

回答

10

我解決了我的問題,對於任何想要未來解決方案的人來說,如果您在此之後仍然卡住,請給我發消息,我發現很難找到資源。

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

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

感謝您的有用答案。 'key'應該被釋放以釋放與一個開放的RegistryKey相關的系統句柄。你可以在'using'語句中使用'key'。 – Ron 2016-12-07 18:42:22

0

這個問題對我很有幫助。我想出了一個幫手類,想要玩新的元組。

實例:

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

類:

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

} 
相關問題