Python Subprocess在Windows上删除reg键

问题描述 投票:2回答:1

我的代码无法正常工作:

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以及。

我的第一个想法是我必须逃避\不知何故,但我不确定这是我需要的,也不知道如何去做。我还尝试使用args 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

注:我导出了密钥,因此每次成功尝试后我都可以再次添加密钥。

注: Windows返回消息已被翻译,可能不准确。

python windows escaping registry subprocess
1个回答
2
投票

我是这么认为的(32位部分)。你遇到了[MS>Docs]: Registry Keys Affected by WOW64生成的问题。

换句话说(在64位Win上),对于某些注册表项(包括此项),有2个不同的位置:

  • 一个用于64位(默认(和旧)一个)
  • 一个用于32位(全新)

默认情况下,64位应用程序会自动使用64位注册表位置; * 32bit8也是如此(当然可以通过编程方式修改 - 至少对于64位应用程序而言)。

因此,为了使32位应用程序具有一些硬编码的注册表键,仍然可以在64位Win上工作(记住在32位应用程序中硬编码的密钥现在是64位,并且它对应用程序是不可见的,而真正的32位是其他地方),MS想出了这个方法。相同的方法适用于文件系统上的路径(System32 vs C:\ Windows下的SysWOW64)。

现在为什么它可以在cmdline上运行?作为64位操作系统,默认cmd是64位(启动64位reg.exe),因此它找到了密钥。是的,你有2厘米(上面每个文件夹下一个),实际上(几乎)所有的Win可执行文件(和.dll)都是“重复的”。

要进行测试,请从C:\ Windows \ SysWOW64启动cmd.exe,然后运行reg命令,它将失败。

最后,为了解决这个问题,使用64位Python版本关联.py文件(我注意到你直接运行它)(你可能需要下载并安装它)。

© www.soinside.com 2019 - 2024. All rights reserved.