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

时间:2016-10-03 17:10:16

标签: c# windows registry registrykey

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

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之前的路径并忽略其余的路径,因为我只想看看它是否存在此路径,如果存在,请进入路径以获取密钥 - 值。

更新

感谢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文件夹中获取键值?因为上面的代码只返回false为真。

3 个答案:

答案 0 :(得分:0)

尝试使用以下内容,它将具有安装路径

var path = Registry.GetValue(@" HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ firefox.exe","",null);

答案 1 :(得分:0)

您可以使用RegistryKey.GetSubKeyNames Method ()获取条目的所有子项,然后在哪里查看是否有任何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"));

还要在评论中注明

  

应该有更好的方法来做到这一点而不是收集alllll(原文如此)   卸载内部的密钥,因为它可以变得非常大。 @MarcB谢谢   你这个。

我认为没有更好的方法可以部分匹配子键

并回答评论:

  

谢谢!它的工作。是否有远离(原文如此)获取其中的值   像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")
    );
}

答案 2 :(得分:0)

如果安装了Firefox,它会将自己注册到HTML文件的“打开方式...”列表中。

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

相关问题