C# 从x64程序中搜索x32注册表项
我正在为x64编写一个C#应用程序,我的问题是我正在注册表中搜索包含某些关键字的一些键,由于注册表重定向,我只能搜索x64应用程序的注册表。C# 从x64程序中搜索x32注册表项,c#,.net,windows,registry,64-bit,C#,.net,Windows,Registry,64 Bit,我正在为x64编写一个C#应用程序,我的问题是我正在注册表中搜索包含某些关键字的一些键,由于注册表重定向,我只能搜索x64应用程序的注册表。 我设法在网上找到了一些代码,但我真的不知道该怎么处理它,因为据我所知,只有在我搜索模式或关键字时知道确切的键名,它才起作用。 [DllImport(“advapi32.dll”,EntryPoint=“RegOpenKeyEx”)] 公共静态外部注册表OpenKeyEx\u DllImport( UIntPtr hKey, 字符串子键, uint选项,
我设法在网上找到了一些代码,但我真的不知道该怎么处理它,因为据我所知,只有在我搜索模式或关键字时知道确切的键名,它才起作用。 [DllImport(“advapi32.dll”,EntryPoint=“RegOpenKeyEx”)] 公共静态外部注册表OpenKeyEx\u DllImport( UIntPtr hKey, 字符串子键, uint选项, 内特萨姆, out IntPtr phkResult)
你试过使用LogParser吗?下面是一个如何使用它查询注册表的示例
如果您的目标是.net 4,则有一个新添加项允许您在托管代码中指定32位注册表。您可以使用指定适当的RegistryView 如果您的目标是.net 4,则有一个新添加项允许您在托管代码中指定32位注册表。您可以使用OpenBaseKey()指定适当的RegistryView。太好了,谢谢!成功了,现在我如何将您的评论标记为正确答案?诀窍是使用
KEY\u WOW64\u 32KEY
常量。在未来,考虑发布你正在使用的实际代码,而不是一些与你的问题无关的互联网上的随机代码。我不知道如何设置RealyVIEW视图,所以那是我当时使用的实际代码,使用KyyWoWoWo.64 32 KEY的问题是我不知道如何获取子密钥。(找到一个链接)所以任何方法都适用于我。不,谢谢,但显然它仍然被重定向。我正在搜索\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,但我得到\HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
[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;
}