2008-11-17 26 views

Respuesta

11

Ayuda here ...

Microsoft tiene una gran (pero no muy conocida) herramienta para esto - llamada LogParser

Utiliza un motor SQL para consultar todo tipo de datos basados ​​en texto como el Registro, el Sistema de archivos, el registro de eventos, AD, etc. ... Para poder usar C#, necesita construir un Ensamblaje de interoperabilidad del Logparser. dll Servidor COM que utiliza el siguiente comando (ajuste LogParser.dll ruta) .

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

A continuación se presenta una muestra pequeña, que ilustra cómo consultar el valor 'VisualStudio' en el \ HKLM \ SOFTWARE \ Microsoft árbol.

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

esto solo mira en los valores de registro, ¿hay alguna manera de buscar también la clave de registro? intenté reemplazar 'Value' con' KeyName' no funcionó. Gracias –

17

En caso de que no quieren tener una dependencia de LogParser (tan poderosa como lo es): Me gustaría echar un vistazo a la clase Microsoft.Win32.RegistryKey (MSDN). Use OpenSubKey para abrir HKEY_CLASSES_ROOT \ Installer \ Products, y luego llame al GetSubKeyNames para, bueno, obtener los nombres de las subclaves.

Abra cada uno de esos a su vez, llame al GetValue por el valor que le interesa (ProductName, supongo) y compare el resultado con lo que está buscando.

Cuestiones relacionadas