我正在创建一个WPF实用程序,它需要访问本地计算机的注册表,然后找出程序的安装路径。从注册表中检索文件安装路径
我已经导航到通过Regedit的键,它给出了一个名称,类型和数据,它显示了数据中的安装路径,我想提取安装路径。
我知道我需要定位到注册表中的此项:
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ App路径\
那么我就需要这个键与内访问文件夹有关安装路径的信息。
-
我正在创建一个WPF实用程序,它需要访问本地计算机的注册表,然后找出程序的安装路径。从注册表中检索文件安装路径
我已经导航到通过Regedit的键,它给出了一个名称,类型和数据,它显示了数据中的安装路径,我想提取安装路径。
我知道我需要定位到注册表中的此项:
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ App路径\
那么我就需要这个键与内访问文件夹有关安装路径的信息。
-
我解决了我的问题,对于任何想要未来解决方案的人来说,如果您在此之后仍然卡住,请给我发消息,我发现很难找到资源。
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths\myexe.exe");
string regFilePath = null;
object objRegisteredValue = key.GetValue("");
registeredFilePath = value.ToString();
感谢您的有用答案。 'key'应该被释放以释放与一个开放的RegistryKey相关的系统句柄。你可以在'using'语句中使用'key'。 – Ron 2016-12-07 18:42:22
要读取你应该使用Microsot.Windows.RegistryKey class,类Registry可以为你打开的RegistryKey注册表项。
这个问题对我很有帮助。我想出了一个帮手类,想要玩新的元组。
实例:
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());
}
}
}
}
}
我只想读出的键,然后提取的特定程序的安装路径。 – LouisColeman 2012-08-17 15:47:56
当您想出答案时,请将其作为一个答案发布,而不是编辑原始问题。 =) – 2012-08-20 13:12:16
在大多数情况下访问注册表是不鼓励的,大部分你需要的可以在应用程序和环境类中找到,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