使用Python winreg更改注册表项不会生效,但不会引发错误

2024-04-25 17:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

对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”替换为计算机名,它也没有效果。感谢您提供的任何提示!你知道吗


Tags: 代码脚本目标远程windows管理员计算机错误
1条回答
网友
1楼 · 发布于 2024-04-25 17:38:09

基本上你需要做两件事: 第一种是,当您打开一个键并授予对程序的访问权限时,您需要更加具体,这意味着您需要指定您的计算机是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")

您可以在documentation中阅读更多关于这方面的内容。你知道吗

相关问题 更多 >