我的代码没有按预期工作:
import subprocess
key = 'reg delete HKEY_USERS\S-1-5-21-2637495828-1099793317-3825703309-1000\SOFTWARE\Classes\CLSID\{0E270DAA-1BE6-48F2-AC49-D955BE4EEF1D} /f'
subprocess.call(key, shell=True)
运行 Windows 10 64b,也尝试使用 subprocess.Popen。
我的第一个想法是我必须以某种方式逃避\,但我不确定这是否是我需要的,也不知道如何去做。
我还尝试使其与参数列表 key = ['reg', 'delete', 'HKEY...'])
一起使用,这给出了相同的结果
Python 脚本的结果
C:\test.py
Error : Couldn't find the key or registry value
Windows 提示符下的命令的结果
C:\reg delete HKEY_USERS\S-1-5-21-2637495828-1099793317-3825703309-1000\SOFTWARE\Classes\CLSID\{0E270DAA-1BE6-48F2-AC49-D955BE4EEF1D} /f
Operation Suceeded
注意我导出了 key ,以便在每次成功尝试后再次添加它。
注意Windows 返回消息已翻译,可能不准确。
最佳答案
我是这么认为的(32位部分)。您遇到了 [MS>Docs]: Registry Keys Affected by WOW64 生成的问题.
换句话说(在 64 位 Win 上),对于某些注册表项(包括这个),有 2 个单独的位置:
- 一个用于 64 位(默认(和旧)一个)
- 一个用于 32 位(全新)
默认情况下,64 位 应用程序会自动使用 64 位 注册表位置;对于 *32bit8 来说也是如此(当然可以通过编程方式修改 - 至少对于64位应用程序)。
因此,为了使具有某些硬编码注册表项的 32 位 应用程序仍能在 64 位 Win 上运行(请记住硬编码在32 位 应用现在是 64 位,并且它对应用不可见,而真实 Strong> 32bit 是其他地方),MS 提出了这种方法。同样的方法适用于文件系统上的路径(System32 vs SysWOW64 >C:\Windows)。
现在为什么它可以在cmdline中工作?作为 64 位 操作系统,默认 cmd 为 64 位(启动 64 位 reg.exe),因此它找到了 key 。是的,您有 2 个 cmd(上述每个文件夹下都有一个),实际上(几乎)所有 Win 可执行文件(以及 .dll s) 是“重复的”。
要进行测试,请从C:\Windows\SysWOW64启动cmd.exe,然后运行reg命令,它将失败。
最后,要解决这个问题,请将 .py 文件(我注意到您直接运行了它)与 64 位 Python 版本(您可能需要下载并安装它)。
关于Python 子进程在 Windows 上删除 reg key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32236009/