我正在编写一个适用于x64的C#应用程序,我的问题是我在注册表中搜索包含某些关键字的某些键,并且我只能搜索注册表中的x64应用程序,因为注册表重定向。
我想在网上找到一些代码,但我真的不知道如何处理它,因为据我所知,只有当我在搜索模式或关键字时才知道确切的密钥名称才有效。
[DllImport(“advapi32.dll”,EntryPoint =“RegOpenKeyEx”)]
public static extern int RegOpenKeyEx_DllImport(
UIntPtr hKey,
string subKey,
uint选项,
int sam,
IntPtr phkResult);
[DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
static extern int RegQueryValueEx_DllImport(
IntPtr hKey,
string lpValueName,
int lpReserved,
out uint lpType,
System.Text.StringBuilder lpData,
ref uint lpcbData);
public string GetKeyValue(string strSubKey, string strKey)
{
UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
const int KEY_WOW64_32KEY = 0x0200;
const int KEY_QUERY_VALUE = 0x1;
IntPtr hKeyVal;
uint lpType;
uint lpcbData = 0;
System.Text.StringBuilder pvData = new System.Text.StringBuilder(1024);
int valueRet;
string returnPath = String.Empty;
unchecked
{
try
{ //Open the required key path
valueRet = RegOpenKeyEx_DllImport(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, out hKeyVal);
//Retreive the key value
valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);
valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);
returnPath = pvData.ToString();
}
catch (Exception e)
{
throw (e);
}
}
return returnPath;
}
答案 0 :(得分:2)
如果您的目标是.net 4,则有一个新增功能允许您在托管代码中指定32位注册表。您使用OpenBaseKey指定适当的RegistryView。
答案 1 :(得分:0)
您是否尝试过使用LogParser?以下是如何使用它来查询注册表的示例。