对 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”替换为计算机名称,它也没有效果。感谢您提供的任何提示!
好吧,基本上你需要做两件事:
第一个是,当您打开密钥并授予对程序的访问权限时,您需要更加具体,这意味着您需要指定您的计算机是 32 位还是 64 位。例如,我的机器是 64 位,所以我需要将密钥打开更改为:
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")
您可以在以下位置阅读有关此内容的更多信息文档 https://docs.python.org/3/library/winreg.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)