for key in keys:
try:
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key) as reg_key:
i = 0
while True:
try:
subkey_name = winreg.EnumKey(reg_key, i)
with winreg.OpenKey(reg_key, subkey_name) as subkey:
try:
display_name = winreg.QueryValueEx(subkey, "DisplayName")[0]
software_info = {}
for value_name in ["DisplayVersion", "Publisher", "InstallLocation", "UninstallString"]:
try:
software_info[value_name] = winreg.QueryValueEx(subkey, value_name)[0]
except (FileNotFoundError, OSError):
pass
# 扫描文件残留
leftovers = []
if os.path.exists(install_location):
for root, dirs, files in os.walk(install_location):
for file in files:
leftovers.append(os.path.join(root, file))
for dir in dirs:
leftovers.append(os.path.join(root, dir))
if not path or not os.path.exists(path):
messagebox.showwarning("警告", "请先选择有效的文件或文件夹")
return
if not self.occupying_processes:
# 如果没有检测到占用进程,直接尝试删除
result = messagebox.askyesno("确认删除",
f"确定要删除以下文件或文件夹吗?\n\n{path}\n\n"
"此操作不可撤销!")
if not result:
return
self.log(f"正在尝试删除: {path}")
threading.Thread(target=self._delete_file, args=(path, False)).start()
else:
# 如果有占用进程,先确认是否终止进程
proc_names = ", ".join([proc['name'] for proc in self.occupying_processes])
result = messagebox.askyesno("确认强制删除",
f"以下进程正在占用此文件或文件夹:\n{proc_names}\n\n"
"确定要终止这些进程并强制删除吗?\n\n"
f"文件/文件夹路径: {path}\n\n"
"此操作不可撤销!")
if not result:
return
# 第三次写入:随机数据
self.log("正在执行第三次数据覆盖...")
f.seek(0)
import random
random_data = bytes([random.randint(0, 255) for _ in range(file_size)])
f.write(random_data)