打开注册表方法:在命令行输入 regedit。
我在这个位置底下创建一个名字叫Bentley的键(注册表中好像叫键,看起来像文件夹)
这个文件的权限必须是完全控制的,不然python无法访问这个文件。设置文件问完全控制,所有的用户。(我个人想法)
然后给文件加上其他子项。我们在安装软件时,这个文件底下会有很多其他的子项。
接下来是python代码:其中_winreg不知道为啥pip不下来,我用了pypiwin32包。里面包含了需要的
win32api, win32con的模块.
import win32api, win32con
import os
global reg_root
reg_root= win32con.HKEY_LOCAL_MACHINE #这个是必须的,而且只能是目录计算机底下那几个子项
global reg_flags
reg_flags = win32con.WRITE_OWNER|win32con.KEY_WOW64_64KEY|win32con.KEY_ALL_ACCESS #这个自己百度
reg_path = "SOFTWARE\WOW6432Node\Bentley"#具体到路径
try:
key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags) #打开键看存不存
print("Bentley exist")
except Exception as e:
key = None
print("Bentley dont exist")
def Recursion(path) : #后续遍历递归小函数,好像是深度优先,忘了
key = win32api.RegOpenKeyEx(reg_root, path, 0, reg_flags)
m_item = win32api.RegEnumKeyEx(key)
if not m_item:
reg_parent, subkey_name = os.path.split(path) #获得父路径名字 和自己的名字,而不是路径
try:
key_parent = win32api.RegOpenKeyEx(reg_root, reg_parent, 0, reg_flags) #看这个节点是否可被访问
win32api.RegDeleteKeyEx(key_parent, subkey_name) #删除这个节点
return
except Exception as e:
print("Bently 被拒绝访问")
return
for item in win32api.RegEnumKeyEx(key): #递归加子节点
strRecord = item[0] #采用key的第一个节点,item里面是元组,获取第一个名字。就是要的子项名字
newpath = path + '\\' + strRecord
Recursion(newpath)
#删除父节点
root_parent, child_name = os.path.split(path)
try: #看这个节点是否可被访问
current_parent = win32api.RegOpenKeyEx(reg_root, root_parent, 0, reg_flags)
win32api.RegDeleteKeyEx(current_parent, child_name)
except Exception as e:
print("Bently 被拒绝访问")
return
if key != None:
Recursion(reg_path)
try:
key = win32api.RegOpenKeyEx(reg_root, reg_path, 0, reg_flags)
m_item = win32api.RegEnumKeyEx(key)
if not m_item:
print("Bentley 无子项,delete Bentley successful!")
else:
print("Bently 有子项,its failing!")
except Exception as e:
print("its wrong operation!")
os.system('regedit')
删除完后Bentley这个键还在,底下的子项没了,bentley没删除掉,是因为他的父节点没设置成完全控制,就是这个东东
WOW6432Node
本来想发项目的,赚点积分,下载文章的,想想大家可能也为积分发愁,真是的!