0
Microsoft.Win32.RegistryKey registryPath = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing");

Microsoft.Win32.RegistryKey entryKey = registryPath.OpenSubKey("Entry Point");

我在测试中有很多键,格式为:“入口点 011”、“入口点 123” - 所以入口点后面有随机数。

我可以搜索上面的 registryPath 变量并计算包含“入口点”关键字的键的数量吗?假设还存在其他没有此关键字的键。

目前,我一直在使用 for 循环并循环所有可能的组合以获取所有键的计数,检查键是否存在,但是由于键高达“入口点 9000”,因此具有 for 循环执行 9000 次是非常低效的。

 for (int i = 0; i <= highestEntryPointValue; i++)
 {
     Microsoft.Win32.RegistryKey entryKey = steamApps64.OpenSubKey("Entry Point " + Convert.ToString(i));

     if (entryKey != null)
     {
         count++;
     }
 }
4

2 回答 2

2

此示例效率不高,因为它将计数(例如)直到 9000,但是如果只有 3 个键 EntryPoint 011、EntryPoint 123、EntryPoint 9000 怎么办。

单线答案

int count = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing").GetSubKeyNames().Where(s => s.StartsWith("EntryPoint")).Count();
于 2012-04-04T15:29:17.233 回答
1

Microsoft.Win32.RegistryKey 有一个名为 GetSubKeyNames() 的方法,它返回一个带有名称的字符串数组。

string[] keys = registryPath.GetSubKeyNames();

现在您可以循环访问这些键并检查它们的名称,而不会徒劳地打开注册表

var subKeys = Array.FindAll(keys, key => key.Substring(0, 11) == "Entry Point"));
int count = subKeys.Lenght;
foreach(string s in subKeys)
.....
于 2012-04-04T15:31:46.293 回答