2008-11-17 11 views

Répondre

11

Aide here ...

Microsoft a excellent (mais pas bien connu) outil pour ce - appelé LogParser

Il utilise un moteur SQL pour interroger toutes sortes de données textuelles comme le Registre, le Système de fichiers, le journal des événements, AD etc ... Pour être utilisable depuis C#, vous devez construire un assemblage interop à partir du Logparser . Serveur COM dll utilisant suivant (ajuster le chemin LogParser.dll) commande.

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

Voici un petit échantillon, qui illustre comment interroger la valeur 'VisualStudio' dans le répertoire \ HKLM \ SOFTWARE \ Microsoft arbre.

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(); 
} 
} 
} 
+0

Cela ne concerne que les valeurs de registre, y a-t-il un moyen de rechercher la clé de registre? J'ai essayé de remplacer 'Value' avec' KeyName' ne fonctionnait pas. Merci –

17

Si vous ne voulez pas prendre une dépendance à l'égard LogParser (aussi puissant qu'il est): Je prendrais un coup d'œil à la classe Microsoft.Win32.RegistryKey (MSDN). Utilisez OpenSubKey pour ouvrir HKEY_CLASSES_ROOT \ Installer \ Products, puis appelez GetSubKeyNames pour obtenir les noms des sous-clés.

Ouvrez chacun de ceux-ci, appelez GetValue pour la valeur qui vous intéresse (ProductName, je suppose) et comparez le résultat à ce que vous cherchez.