最近想想貌似自己的的想法还不少,所以一直在做东西。由于没有经验所以进展比较慢,但每次看到自己的成果时都会无比的激动,这种感觉是美妙的,其实热爱一件事情,你就会感到是你在享受做这件事的过程结果,而不是这件事本身在玩弄你,兴趣是学习的动力。好了不吹了进入正题。

最近在做一个程序的时候,需要删除一项注册表项,这个注册表项包含子项。由于没有这个API编写的经验,所以走了不少弯路,呵呵原谅一个菜鸟在这边大放厥词把。

我最先想到的函数是RegDeleteKey,并觉得一个注册表的删除能难倒我吗?于是直接就用RegCreatKey打开了注册所要要删除的子项所在的项,再用RegDeleteKey删除,可是问题就在这,编译运行都没有任何问题,都是顺利通过的,但是注册表就是没有被删除,于是上论坛提问,等了几天也没人能给出个所以然,回帖的不少,蹭分的也不少,哈哈。无意中看到了一个关于RegDeleteKey的权限问题,我才想到原来这个里面还有API变成常遇到的的问题——权限,这个我遇到过好多次了,就是一直不能吸取教训。好吧,我修改权限,改用RegOpenKeyEx函数,并在参数中赋予打开句柄的KEY_ALL_ACCESS的权限(这个可以自己看MSDN)我想这下一定没有什么问题了吧?编译运行……结果还是一样,这时候就比较郁闷了。论坛上有的朋友让我用GetLastError函数看看出错的原因,我试了一下返回的结果是0,也就是成果运行,又有人说重新启动一下,注册表的修改一般需要重新启动,我又重启了一下,结果依旧,为什么子项没有被删除呢?想了很长时间,我怀疑到函数本身上来——RegDeleteKey。上网看看,才发现网上众说风云,有的说这个函数删除子项和该子项下的所有子项(典型的就是一个名叫API函数大全的玩意),有的说,RegDeleteKey函数不能删除带有子项的注册表项,果然问题在这里。果断上MSDN,MSDN上是这么说的The subkey to be deleted must not have subkeys. To delete a key and all its subkeys, you need to enumerate the subkeys and delete them individually. To delete keys recursively, use the RegDeleteTree or SHDeleteKey function.大意是RegDeleteKey函数不能删除一个含有子项的注册表项,如果想要删除此类的项,必须先枚举再删除。你也可以使用RegDeleteTree或者SHDeleteKey函数。(本人英语不好,大概说一下大意)。到这里才知道原来RegDeleteKey函数不能删除带子项的项,难怪一直没有被删除。而RegDeleteKey函数又只能在VISTA系统以上的平台上编译,我就只能一个个遍历删除了。

于是我又上网回复了自己的帖子,嘿嘿,那个没人能解决的问题。其实我知道,这个简单的问题很多人都知道,就是有点小气,不愿告诉我,开个玩笑。无意间看到一个哥么的问题和我的一样,也没能解决,哈哈,但愿你能看到我的博客。

你看一个多么小的问题,搞的我晕头转向的,其实我们说无论做什么事情都需要细心,从小的方面着手,不能眼高手低,特别是当你还是一个学习中的菜鸟的时候,不能因为事情很小就放弃它,否则当他重要的时候他也会放弃你。

最后愿天下像我一样的菜鸟都能够学习顺利,工作如意。

附:

删除带子项的注册表项(不使用RegDeleteKey函数)

BOOL NosafeModle(void)

{

HKEY hKey;

DWORD count;

LPTSTR data1=_T("SYSTEM//CurrentControlSet//Control//SafeBoot//Minimal");

LPTSTR data2=_T("SYSTEM//CurrentControlSet//Control//SafeBoot//Network");

/*if (RegCreateKey(HKEY_CURRENT_USER,data,&hKey)==ERROR_SUCCESS)

{

RegDeleteKey(hKey,_T("Minimal"));

RegDeleteKey(hKey,_T("Network"));

}*/

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,data1,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)

{

if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&count,NULL,NULL,NULL,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)

{

DWORD dwIndex=0;

char szName[256]={0};

for(;dwIndex<count;dwIndex++)

{

if(RegEnumKey(hKey,dwIndex,szName,257)==ERROR_SUCCESS)

{

RegDeleteKey(hKey,(const char *)szName);

}

}

}

}

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,data2,0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)

关于RegDeleteKey无法删除注册表项相关推荐

  1. # 删除注册表项键值_强制删除:让你的电脑上不再有“顽固”程序

    微信搜一搜麦克NO1对于很多用户来说,在日常使用电脑的时候,经常会有意无意的安装一些程序.而这些程序也是严重影响了电脑的运行速度.所以,在忍无可忍的情况下,需要将这些"顽固"程序卸 ...

  2. 以system用户登录win7修改删除注册表项的方法

    有些注册表项只有system用户才具备有效权限修改和删除,管理员都无权.如何以system用户登录windows呢?按下面步骤即可. 1.以管理员用户运行 cmd . exe   sc Create ...

  3. 在Windows 7下删除注册表项时,权限不足

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\vid_**** 注册表项下的 properties 子项(以及其下的子项)为 system  ...

  4. win10 无法删除 注册表 蓝牙_如何解决处理深度技术Win10系统删除注册表项时出错问题...

    匿名用户 1级 2017-04-14 回答 win10系统运行程序假死无响应解决方法一:应用程序加载失败了 1.如果win10中的应用程序出现不响应的情况,应该是应用程序加载失败了.可以通过重置方法来 ...

  5. Dos命令删除注册表项

    reg delete hklm\software\microsoft\mslicensing /f 连接远程桌面 mstsc /v:192.168.41.9 转载于:https://www.cnblo ...

  6. 如何通过使用注册项 (.reg) 文件添加、修改或删除注册表子项和值

    警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统.Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题.使用注册表编辑器需要您自担风险. 本文分步介绍了如何使用注 ...

  7. windows下批处理删除文件及注册表项

    1.windows下批处理删除注册表项 假如我要清除WinRAR的历史记录,可以新建个批处理文件, 然后在里面加入如下文字: reg delete HKEY_CURRENT_USER/Software ...

  8. VISTA中注册表项LEGACY_****的删除--另一种方法:使用psExec

    有网友希望了解删除VISTA注册表的保护项的另一种方法,最近很忙,一直没写. 其实就是使用PsTools中的psExec,具体可以参看这篇文章: http://blog.csdn.net/zdl101 ...

  9. ug许可证安装的java卸载不了_UG软件和NX许可证在系统控制面板里卸载不掉怎么办?可以直接删除注册表吗?...

    中文翻译:未标记为进行中时调用的运行脚本. 这个问题一般是你非正常卸载造成的,可以这么理解,控制面板里没删除,你就把NX软件程序文件都删除了,造成无法卸载. 你说的可以在注册表里删除应用程序,但是先不 ...

最新文章

  1. C++反汇编-加法分析
  2. android 使用广播监听网络状态
  3. mysql和mybatis优化_MySQL + mybatis的SQL优化方案
  4. SharePoint 2013: The New Web Application button is disabled is the central administration
  5. [转] Ubuntu/Linux Mint/Debian 安装 Java 8
  6. python print 用法
  7. AttributeError: ‘Model‘ object has no attribute ‘_get_distribution_strategy
  8. c# msi中加入驱动_MSI微星:给你的CPU装上热交换气缸活塞,不用电也能驱动风扇降温...
  9. Python压缩多个属于不同驱动器的文件夹至同一个zip文件
  10. 自制XML解析器源码分析
  11. canny边缘检测_每日习题-图像处理-Canny边缘检测(2020.4.15)
  12. 北师大计算机专业保研率,师范类高校保研情况,3所学校保研率超20%,北师大最高达到35%...
  13. linux源码编译ipk,Ubuntu亲自手动编译Openwrt (DreamBox): for njit....ipk
  14. 苹果手机微信声音小怎么调大声_怎么把手机声音变大,试试这种方法
  15. cubemx配置usb
  16. 绅士游戏 android绅士在线阅读,一骑当千游戏,绅士游戏 android绅士
  17. JavaEE企业级实战项目 智牛股第六天 股票交易过程
  18. 想裁剪视频时长,用电脑怎么裁剪视频时长
  19. HDMI/DVI 显示器热插拔与检测原理(HPD)
  20. 企业微信登录报错:应用程序无法正常启动(0xc0000142);Win10应用程序无法正常启动0xc0000142错误的解决方法

热门文章

  1. 利用阿里云API ONS接口获取当前用户下的topics使用情况
  2. 如何让考核成为盈利工作?
  3. [若有所悟]一年又一年
  4. java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现
  5. 旋转木马是最残忍的游戏, 彼此追逐却有永恒的距离
  6. 如何让手机计算机出现错误二字,手机日历出错了?看到很多人都在讨论“二九”两字,你也去看一下...
  7. zgc的Allocate stall原理
  8. 头条暑期训练营往期题目及个人答案
  9. CNZZ 统计代码及作弊分析
  10. 差点被骗一万元,电话诈骗何时休