32位程序在64位系统下运行时写入注册表项的删除

悲伤的肉包子 2012-04-06 09:54:58
如题,32位下写入注册表,然后另一程序在卸载时删除该注册表,在64位WIN7运行时出错,写入注册表的程序是用C++写的ACtive控件,然后我试了下,如果写一个C++的MFC aplication程序运行在64位WIN7下删除能成功,代码如下

CRegKey reg;
LONG lRes = reg.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\ABCDE"));
reg.DeleteValue(_T("client"));


但是如果用C#写的却删除失败

RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE\\ABCDE", true);
software.DeleteValue("client");
software.Close();


我看了下注册表,发现ACtive在写入注册表时,XP下是写在"HKEY_LOCAL_MACHINE\SOFTWARE\ABCDE\"下,但64位WIN7是写在了共有四个目录下,“计算机\HKEY_USERS\....\SOFTWARE\Wow6432Node\ABCDE”下“计算机\HKEY_CLASES_ROOT\...\SOFTWARE\Wow6432Node\ABCDE”还有“计算机\HKEY_CURRENT_USER\....\SOFTWARE\Wow6432Node\ABCDE”,还有,“计算机\HKEY_USERS\....\SOFTWARE\Wow6432Node\ABCDE”(与第一个中间路径不一样,一长串数字),为嘛用C++删除能成功关联删除成功,用C#却失败,上面两个方法定位注册表路径有不一样嘛?
...全文
832 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
悲伤的肉包子 2012-04-06
  • 打赏
  • 举报
回复
是呀,很郁闷呀,有高手知道是为什么嘛
孟子E章 2012-04-06
  • 打赏
  • 举报
回复
C++程序是以32位运行的吗?
参见
http://www.cnblogs.com/mingmingruyuedlut/archive/2011/01/20/1940371.html

http://www.roelvanlisdonk.nl/?p=919

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32-bit-application-or-vice-versa/

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧