我正在寫一個針對x64的C#應用程序,我的問題是我正在搜索註冊表中某些包含某些關鍵字的鍵,而且我只能搜索由於註冊表重定向而導致的x64應用程序註冊表。
我試圖在網上找到一些代碼,但我真的不知道該怎麼處理它,因爲從我所瞭解的情況來看,只有當我在搜索模式或關鍵字時知道確切的鍵名稱纔有用。 [的DllImport( 「ADVAPI32.DLL」,入口點= 「RegOpenKeyEx」)] 公共靜態外部INT RegOpenKeyEx_DllImport( UIntPtr的hKey, 串子項, UINT選項, INT SAM, 出的IntPtr phkResult);從x64程序中搜索x32註冊表項
[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;
}
如果您的目標是.net 4,則會有一個新增功能,允許您在託管代碼中指定32位註冊表。您使用OpenBaseKey(http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.openbasekey.aspx)指定適當的RegistryView。 – tyranid 2012-02-09 21:45:38
太好了,謝謝!那工作,現在我怎麼把你的評論標記爲正確答案? – trebor 2012-02-09 22:27:32
訣竅是使用'KEY_WOW64_32KEY'常量。將來,請考慮發佈您正在使用的實際代碼,而不是一些與您的問題無關的隨機代碼。 – 2012-02-10 02:18:01