Python 子进程在 Windows 上删除 reg key

标签 python windows escaping registry subprocess

我的代码没有按预期工作:

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 位 操作系统,默认 cmd64 位(启动 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/

相关文章:

r - R 中数字转义字符的不一致行为

Windows 上的 Python 2.x 和 3.x 一起使用

python - ssl SSLError outines :SSL_CTX_use_certificate_chain_file:PEM lib

windows - 我已经在 Windows Azure 上成功部署了 MVC3 网站,但它不起作用

c# - 定义不同类型的二维动态数组

python - 在 Django 中将模板渲染为 json 的转义字符串

python - QGridLayout,展开widget就行

python - python 2.7 中没有名为 antlr4 的模块

c - 适用于 x86_64 的 Windows 的免费编译器

c++ - 在 C++ 中为 SQL 转义字符串