Как искать конкретное значение в ключах реестра - PullRequest
7 голосов
/ 17 ноября 2008

Как мне найти конкретное значение в ключах реестра?

Например, я хочу найти XXX в

HKEY_CLASSES_ROOT\Installer\Products

будет приветствоваться любой пример кода в C #,

спасибо

Ответы [ 2 ]

18 голосов
/ 17 ноября 2008

Если вы не хотите зависеть от LogParser (настолько мощного, насколько это возможно): я бы взглянул на класс Microsoft.Win32.RegistryKey ( MSDN ). Используйте OpenSubKey, чтобы открыть HKEY_CLASSES_ROOT \ Installer \ Products, а затем вызовите GetSubKeyNames, чтобы получить имена подразделов.

Откройте каждую из них по очереди, позвоните GetValue для значения, которое вас интересует (я думаю, ProductName) и сравните результат с тем, что вы ищете.

11 голосов
/ 17 ноября 2008

Справка здесь ...

У Microsoft есть отличный (но не очень известный) инструмент для этого - LogParser

Он использует движок SQL для запроса всех видов текстовых данных, таких как реестр, Файловая система, журнал событий, AD и т.д ... Чтобы использовать его из C #, вам нужно собрать Interop Assembly из COM-сервер Logparser.dll, используя следующие (отрегулируйте путь LogParser.dll) команда.

tlbimp "C:\Program Files\Log Parser 2.2\LogParser.dll"
/out:Interop.MSUtil.dll

Ниже приведен небольшой пример, который иллюстрирует, как запросить значение VisualStudio в дереве \ HKLM \ SOFTWARE \ Microsoft.

using System;
using System.Runtime.InteropServices;
using LogQuery = Interop.MSUtil.LogQueryClass;
using RegistryInputFormat = Interop.MSUtil.COMRegistryInputContextClass;
using RegRecordSet = Interop.MSUtil.ILogRecordset;

class Program
{
public static void Main()
{
RegRecordSet rs = null;
try
{
LogQuery qry = new LogQuery();
RegistryInputFormat registryFormat = new RegistryInputFormat();
string query = @"SELECT Path from \HKLM\SOFTWARE\Microsoft where
Value='VisualStudio'";
rs = qry.Execute(query, registryFormat);
for(; !rs.atEnd(); rs.moveNext())
Console.WriteLine(rs.getRecord().toNativeString(","));
}
finally
{
rs.close();
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...