2012-08-17 94 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()); 
      } 
     } 
     } 
    } 

}