当只知道名称的前缀部分时,打开注册表项

本文关键字:分时 注册表 前缀部 | 更新日期: 2023-09-27 18:11:30

我正在使用这两个注册表项。

64位Firefox版本:

HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall'Mozilla Firefox (????)

32位Firefox版本:

HKEY_LOCAL_MACHINE'SOFTWARE'Wow6432Node'Microsoft'Windows'CurrentVersion'Uninstall'Mozilla Firefox xx.xx.xx (x86 en-US)

我想要读取路径中名为InstallLocation的键。问题在路径上。该路径包含Firefox版本,其中包含版本号。

我可以硬编码路径,但是当Firefox更新时,路径也会更新,所以更新后它将无法工作。

是否有一种方法可以动态地读取路径的一部分并解析出版本以达到关键?

换句话说,是否有一种方法可以读取到Mozilla Fireox的路径并忽略其余部分,因为我只想看看这个路径是否存在,如果存在,则进入路径以获取键值

Thanks to konkked

var has32bit = 
     Registry.LocalMachine
        .OpenSubKey("SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall")
        .GetSubKeyNames()
        .Any(a=>a.StartsWith("Mozilla Firefox"));
var has64bit = 
     Registry.LocalMachine
        .OpenSubKey("SOFTWARE'Wow6432Node'Microsoft'Windows'CurrentVersion'Uninstall")
        .GetSubKeyNames()
        .Any(a=>a.StartsWith("Mozilla FireFox"));

我怎么能得到一个键值在Mozilla Firefox文件夹?因为上面的代码只返回true或false。

当只知道名称的前缀部分时,打开注册表项

试试下面的命令,它会有安装路径

var path =注册表。GetValue(@"HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'CurrentVersion'App Paths'firefox.exe", ", null);

可以使用RegistryKey获取条目的所有子键。GetSubKeyNames方法(),然后执行a查看是否有FireFox

var has32bit = 
     Registry.LocalMachine
        .OpenSubKey("SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall")
        .GetSubKeyNames()
        .Any(a=>a.StartsWith("Mozilla Firefox"));
var has64bit = 
     Registry.LocalMachine
        .OpenSubKey("SOFTWARE'Wow6432Node'Microsoft'Windows'CurrentVersion'Uninstall")
        .GetSubKeyNames()
        .Any(a=>a.StartsWith("Mozilla FireFox"));

还注意到在评论中你说

应该有更好的方法来做到这一点,而不是收集所有(原文如此)其中的关键卸载,因为它可以变得相当大。@MarcB谢谢你tho。

我不认为有更好的方法来部分匹配子键

和回答注释:

谢谢!这是工作。有没有一种方法(原文如此)来获取其中的值InstallLocation

之后的完整路径

当您决定要哪个版本时,您可以获得实际的子键,但我不确定您将如何决定,但这里有一个如何访问值的示例:

var subkey32BitBase = 
     Registry.LocalMachine
        .OpenSubKey("SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall");
var fireFoxKeys = subkey32BitBase.GetSubKeyNames(subkey32base);
foreach(var fireFoxSubKey in fireFoxSubKeys)
{
    Console.WriteLine(
      subkey32BitBase
        .GetSubKey(fireFoxSubKey)
        .GetValue("InstallLocation")
    );
}

如果安装了Firefox,它将自己注册到"Open With…" HTML文件列表中。

打开html文件的应用程序名称存储在文件类型的注册表项下,在OpenWithList子键下。应用程序本身的路径保存在HKCR' applications下。