为什么我需要在注册表中设置两次自动登录值才能使其正常工作,我可以解决这个问题吗?

为什么我需要在注册表中设置两次自动登录值才能使其正常工作,我可以解决这个问题吗?

背景:作为我正在构建的自动化测试套件的一部分,我需要在我的虚拟机上“按需”设置自动登录。所谓按需,是指出于安全原因以及巨大的商业案例,我并不一定希望预先配置我的虚拟机或任何快照以设置自动登录。

我目前的解决方案是:我将脚本复制到客户机,然后使用 Sysinternals PsExec 执行该脚本。该脚本是:

reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultUserName /t REG_SZ /d myusername
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultPassword /t REG_SZ /d myfakepassword
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v DefaultDomainName /t REG_SZ /d mydomain
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v ForceAutoLogon /t REG_SZ /d 1
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v AutoAdminLogon /t REG_SZ /d 1
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked" /f /ve /d 1

笔记:我认为 Windows 2000 之后的机器不需要 AutoLogonChecked,但目前我还是这么做以防万一。也许 ForceAutoLogon 也不需要,目前还不确定。

问题:我看到 PsExec 正确执行了此操作并且所有值都在注册表中,但是当我重新启动机器时,用户不会自动登录...当我第二次运行此操作然后重新启动机器时,用户最终登录。

注册表状态之间的差异表明,我第一次运行此程序时,缺少 AutoAdminLogon 的“1”和 DefaultPassword 键。第二次执行时,这些值完全符合我的预期。

那么,这是怎么回事?这是预料之中的事吗?帖子最后声称它确实可以正常工作(问题是注销脚本设置了值)。然而,对我来说似乎不起作用。

请注意,这似乎是 Windows 7 独有的,在 Windows XP 中不会发生

另请注意,您不需要 PsExec 来重现该问题 - 只需自行修改注册表即可

编辑/更新

  • 以交互方式登录并运行脚本(因此,不是远程执行),注销后会自动重新登录(因此,它可以工作)
  • 当我以交互方式登录时,在访客中远程执行脚本,注销后会自动重新登录(因此,它可以工作)
  • 当我使用非交互式会话在客户机中远程执行脚本时,如果我之后登录(因此,现在是交互式的),然后退出,它会重新登录我(因此,它就可以正常工作)

编辑/更新 2:这仅发生在 Win7x86、Win7x64、Win8x64 中。Windows XP 中不会发生这种情况

编辑3:使用 Sysinsternal 的 Autlogon.exe 工具时我得到了相同的行为。

答案1

以纯文本形式将登录名/密码存储在注册表中并不是一个好主意……我建议您看看登录专家工具

答案2

似乎与 PsExec 有关。
阅读此问题,看看其中是否有任何解决方案对您有帮助:
如何通过脚本或命令行更改自动登录?

答案3

tahocannan 向我推荐了 LogonExpert。使用 LogonExpert,我可以静默安装它,用它设置自动登录,然后(远程)终止 Windows 的 LogonUI.exe 进程,然后重新启动。结果:自动登录。然后我立即卸载 LogonExpert,然后在客户机中以交互方式执行命令。

我认为终止 Windows 原生“LogonUI.exe”进程是关键。有时,我会在 LogonExpert 上得到同样的结果,即在设置自动登录后,重新启动不会按预期自动登录。通过结束 LogonUI.exe,它会强制重新加载 LogonExpert 的库。然后重新启动就可以了

答案4

我认为发生这种情况的原因是,第一次设置 AutoAdminLogon = 1 时,Windows 7 中还有另一个注册表值 AutoLogonCount 被设置为 0。如果 Windows 在启动时发现注册表中的该值设置为 0,它将禁用 AutoAdminLogon,这就是您重新启动时无法自动登录的原因。如果您在将 AutoAdminLogon 设置为 1 的同时从注册表中删除 AutoLogonCount,那么重新启动后应该就没问题了。

尽管人们认为自动登录对于常规桌面使用来说是不安全的,但自动登录对于特殊计算机非常有用,例如信息亭或连接到演示显示器或监控设备的计算机,这些设备的软件需要在启动后自动加载。

相关内容