Python 3 winreg: unable to write to the Windows registry
尝试通过下面提供的路径将值写入HKLM配置单元。 代码静默完成,没有错误或异常,但值仍然相同。 该脚本在Administrator下执行,没有它AccessDenied(5)Windows错误按预期抛出。 未安装可能阻止访问注册表的防病毒软件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def write_to_registry(key_hive, key_path, value_name, value_type, key_value): registry_key = None try: registry_key = winreg.OpenKey(key_hive, key_path, 0, winreg.KEY_WRITE) winreg.SetValueEx(registry_key, value_name, 0, value_type, key_value) winreg.CloseKey(registry_key) return True except Exception as e: logger.error("Unable to write to registry path {0}\\{1} with exception {2}", key_hive, key_path, e) if registry_key is not None: winreg.CloseKey(registry_key) return False def winreg_test(): write_to_registry(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows NT\CurrentVersion", "InstallDate", winreg.REG_DWORD, 1520610000) |
我甚至怀疑我遇到了某种系统挂钩(Windows NT是一个敏感键,你知道),但手动编辑或使用命令行工作正常
1 | reg add"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallDate /t REG_DWORD /d 1520610000 /f |
执行"InstallDate"键的编辑没有任何问题
Python 3.6.5
Windows 7 SP1 x64
更新:问题解决了,请参阅下面的解决方案
显然,原因在于x64系统"双"注册表,适用于32位和64位应用程序。 将代码更改为
1 | winreg.OpenKey(key_hive, key_path, 0, (winreg.KEY_WOW64_64KEY | winreg.KEY_WRITE)) |
使事情有效