对于 Python 来说仍然是一个新手,我正在尝试编写一个脚本来允许我更改远程计算机上的特定注册表项,但我在使用它时遇到了一些麻烦。基本上我运行的代码没有错误,但键值也没有设置。我以管理员身份从 Windows 命令提示符运行它,使用在目标计算机上具有管理员权限的帐户。这是相关代码:
registry = winreg.ConnectRegistry(fullSysName, winreg.HKEY_LOCAL_MACHINE)
wholeKey = winreg.OpenKey(registry, "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", 0, winreg.KEY_ALL_ACCESS)
print('Setting AutoAdminLogon\n')
winreg.SetValue(wholeKey, 'AutoAdminLogon', winreg.REG_SZ, '1')
winreg.CloseKey(wholeKey)
winreg.CloseKey(registry)
fullSysName 是一个变量,包含从脚本前面派生的目标机器名称。该脚本运行没有错误,并且我拥有管理员权限,所以我不知道为什么它不起作用。最终使用一些 Powershell 来完成它,但令我困扰的是我无法让它工作并且至少想了解原因。我已经确认,即使我手动将“fullSysName”替换为机器名称,它也没有效果。感谢您提供的任何提示!
最佳答案
好的,基本上您需要做两件事: 第一个是,当您打开一个 key 并授予对您的程序的访问权限时,您需要更加具体,这意味着您需要指定您的机器是 32 位还是 64 位。因此,例如,我的机器是 64 位的,所以我需要将我的 key 打开方式更改为:
wholeKey = winreg.OpenKey(registry, 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon', 0, winreg.KEY_ALL_ACCESS | winreg.KEY_WOW64_64KEY)
对于 32 位机器,您需要添加 winreg.KEY_WOW64_32KEY
第二件事是,SetValue
并不总是有效,所以您需要使用 SetValueEx
,它有 5 个参数(添加的参数必须为 0)。所以在你的情况下:
winreg.SetValueEx(wholeKey, 'AutoAdminLogon', 0, winreg.REG_SZ, "1")
您可以在 documentation 中阅读更多相关信息.
关于python - 使用 Python winreg 更改注册表项未生效,但不会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58439138/