急求助!!注册表删除问题

wasedasai 2011-08-10 04:10:21
想删除注册表,
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{4d36e978-e325-11ce-bfc1-08002be10318}\\##?#FTDIBUS#VID_0403+PID_6001+A4006VViA#0000#{4d36e978-e325-11ce-bfc1-08002be10318}
和他下面的子键。
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{4d36e978-e325-11ce-bfc1-08002be10318}\\##?#FTDIBUS#VID_0403+PID_6001+A4006VViA#0000#{4d36e978-e325-11ce-bfc1-08002be10318}\\#

听说必须先删除子键,做了下面的程序。想先删除子键,但是竟然删除不掉,求教各位高手,帮看看程序的那里有问题。

//类里面定义了下面变量
HKEY rKey;
HKEY RootKey; //注册表主键名称
TCHAR *SubKey; //欲打开注册表项的地址
TCHAR *KeyName; //欲设置项的名字

void CDSADlg::OnBnClickedButton3()
{
RootKey = HKEY_LOCAL_MACHINE;
SubKey = "SYSTEM\\ControlSet001\\Control\\DeviceClasses\\{4d36e978-e325-11ce-bfc1-08002be10318}
\\##?#FTDIBUS#VID_0403+PID_6001+A4006VViA#0000#{4d36e978-e325-11ce-bfc1-08002be10318}\\#";
KeyName = "SymbolicLink";
DeleteKey(RootKey,SubKey,KeyName);
}

int CDSADlg::DeleteKey(struct HKEY__*ReRootKey,TCHAR *ReSubKey,TCHAR *ReKeyName)
{
int i=0; //操作结果:0==succeed

if((RegOpenKeyEx(ReRootKey,ReSubKey,0,KEY_WRITE,&rKey))==ERROR_SUCCESS)
{
if((RegDeleteKey(rKey,ReKeyName))!=ERROR_SUCCESS)
{
AfxMessageBox( "删除失败! ");
int a=GetLastError();
i=1;
}
RegCloseKey(rKey);
}
else
{
AfxMessageBox( "不能打开hKEY ");
i=1;
}
return i;
}
...全文
124 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagicFuzzX 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhanguo77 的回复:]
RegDeleteTree来删除
[/Quote]
晕,那个函数只支持vista以上系统
zhanguo77 2011-08-11
  • 打赏
  • 举报
回复
RegDeleteTree来删除
wasedasai 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 magicfuzzx 的回复:]

Win7吧,GetLastError返回0,但是RegDeleteKey函数返回5,应该是Win7的UAC问题,疑似,不确定
[/Quote]

是 win7
看来只能用SHDeleteKey( HKEY_LOCAL_MACHINE, ReSubKey)
来删除了
MagicFuzzX 2011-08-10
  • 打赏
  • 举报
回复
Win7吧,GetLastError返回0,但是RegDeleteKey函数返回5,应该是Win7的UAC问题,疑似,不确定
wasedasai 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xxq123321 的回复:]

SHDeleteKey
功能:用来删除一个注册表键,包括其下面的子键。

说明
删除一个注册表键,包括其下面的子键。
RegDeleteKey 也可用来删除一个键值。在 Win 95/98 平台下,也可用来删除整个子键和键值。但是在Windows NT/2000平台下,只能用来删除没有子键的键。


引用 4 楼 wasedasai 的回复:

引用 3 楼 xxq12332……
[/Quote]

删除的时没有子键的键啊,还是没有成功
xxq123321 2011-08-10
  • 打赏
  • 举报
回复
SHDeleteKey
  功能:用来删除一个注册表键,包括其下面的子键。

  说明
  删除一个注册表键,包括其下面的子键。
  RegDeleteKey 也可用来删除一个键值。在 Win 95/98 平台下,也可用来删除整个子键和键值。但是在Windows NT/2000平台下,只能用来删除没有子键的键。


[Quote=引用 4 楼 wasedasai 的回复:]

引用 3 楼 xxq123321 的回复:

看看直接打开注册表编辑器能不能删除,是不是权限问题

换成这个函数。就可以删除了,到底是什么原因呢?
SHDeleteKey( HKEY_LOCAL_MACHINE, ReSubKey)
[/Quote]
nnull 2011-08-10
  • 打赏
  • 举报
回复
好像是 RegOpenKeyEx 打开的用 RegDeleteKeyEx 才管用 。

=========
不确定哈~
wasedasai 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xxq123321 的回复:]

看看直接打开注册表编辑器能不能删除,是不是权限问题
[/Quote]
换成这个函数。就可以删除了,到底是什么原因呢?
SHDeleteKey( HKEY_LOCAL_MACHINE, ReSubKey)


xxq123321 2011-08-10
  • 打赏
  • 举报
回复
看看直接打开注册表编辑器能不能删除,是不是权限问题
wasedasai 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]

1. 检查路径是否正确
2. 删除注册表RegDeleteKey是否成功,失败的时候,GetLastError返回什么信息
[/Quote]

路径没有错误,是在注册表那里复制过来的

int a=GetLastError();
CString ss;
ss.Format("%d",a);
AfxMessageBox(ss); //输出的是0
oyljerry 2011-08-10
  • 打赏
  • 举报
回复
1. 检查路径是否正确
2. 删除注册表RegDeleteKey是否成功,失败的时候,GetLastError返回什么信息

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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