有人知道如何通过编程将注册表从HKEY_LOCAL_MCAHINE移动到HKEY_CURRENT_USER吗?
我编写了一个使用RegEnumKeyEx和RegEnumValue的递归函数,但是RegEnumValue似乎返回顶级键下的所有值。
例如,如果键是HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\KeyName1,它下面有3个值,而我有HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\KeyName2,它有2个值。看起来RegEnumKeyEx返回了正确的密钥,但是当我为第一个密钥调用RegEnumValue时(即.KeyName1)返回所有5个值,而不仅仅是该键下的3个值。
希望这一切都有意义。我做错了什么吗?
谢谢你的帮助
下面是一个代码片段,如果有帮助的话:
void CArgusApp::RecurseSubKeys(CString csStartKey)
{
CQERegistry reg;
HRESULT hr = reg.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\" + csStartKey, KEY_QUERY_VALUE );
CStringArray csaDataNames;
reg.GetAllDataNames(csaDataNames);
for (int j = 0; j < csaDataNames.GetSize(); j++)
{
CString csValueName = csaDataNames.ElementAt(j);
TRACE(csStartKey + " - " + csValueName);
}
CStringArray csaKeys;
reg.GetAllSubKeys(csaKeys);
for (int i = 0; i < csaKeys.GetSize(); i++)
{
CString csKey = csaKeys.ElementAt(i);
this->RecurseSubKeys(csStartKey + "\\" + csKey);
}
reg.Close();
}也就是说,上面的GetAllDataNames只是调用RegEnumValue和GetAllSubKeys调用RegEnumKeyEx。
发布于 2009-10-27 06:06:26
查看所有的注册表函数,我发现了这个: SHCopyKey或者我可以使用这个: RegCopyTree for Vista或更高版本。
谢谢你的帮助。
发布于 2009-10-27 05:40:44
我不是这方面的专家,但可以试试这样的东西。
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\\" + csStartKey,
false);
Registry.CurrentUser.CreateSubKey
(myKey.ToString());https://stackoverflow.com/questions/1627348
复制相似问题