10

レジストリキーで特定の値を検索するにはどうすればよいですか?

たとえば、でXXXを検索したい

HKEY_CLASSES_ROOT\Installer\Products

C#のコードサンプルをいただければ幸いです。

ありがとう

4

4 に答える 4

19

LogParser に依存したくない場合 (それは強力です):Microsoft.Win32.RegistryKeyクラス ( MSDN ) を見てみましょう。を使用OpenSubKeyして HKEY_CLASSES_ROOT\Installer\Products を開きGetSubKeyNames、サブキーの名前を取得します。

それぞれを順番に開き、GetValue興味のある値 (ProductName だと思います) を呼び出し、その結果を探しているものと比較します。

于 2008-11-17T14:59:11.910 に答える
11

ここで助けて...

Microsoftには、このための優れた(しかしあまり知られていない)ツールがあります-LogParserと呼ばれます

SQLエンジンを使用して、レジストリ、ファイルシステム、イベントログ、ADなどのあらゆる種類のテキストベースのデータをクエリします。C#から使用するには、次を使用してLogparser.dllCOMサーバーから相互運用機能アセンブリを構築する必要があります。 (LogParser.dllパスを調整)コマンド。

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

以下は、\ HKLM \ SOFTWARE\Microsoftツリーで値'VisualStudio'をクエリする方法を示す小さなサンプルです。

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();
}
}
}
于 2008-11-17T10:26:33.193 に答える