我一直在尝试编写脚本批处理文件或exe来执行登录。它应该执行基本操作 - 只需登录我不在网络中的Windows 7 pc。我有一个在后台运行的jar文件。我想写一个带密码的脚本来登录我自己的Windows 7 pc。
我已经查看了一些实用程序Logon.exe
以上实用程序无法在我的电脑上显示一些错误,如
Windows Logon version 1.04
Copyright (c) 2003-2010 SoftTree Technologies, Inc.
Unable to install logon service (OpenSCManager failed).
Logon failed.
某处告诉该文件应该以admin身份运行。
这是我的代码:
Process process = new ProcessBuilder("C:\\Logon.exe","-p","welcome").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
我也尝试过使用AutoLogon using LogonExpert
上述工具运行正常。但我需要的是只在需要时使用java登录。
请帮帮我们......
答案 0 :(得分:5)
您想要做的是可行的,但您必须遵守不包含Java的规则。这是一个小历史,为什么你当前的尝试不起作用,以及如何解决它。
这不容易。
首先,Windows从Windows Vista获取凭据的方式发生了根本性的变化。您提到的logon.exe实用程序使用旧的体系结构。那时,你可以做任何你想做的事情,因为任何摆弄登录架构的东西在Winlogon的进程中都是一个DLL。您可能已经找到了一些自定义GINA,例如this one I wrote。它们在最新版本的Windows中被忽略。
如今,Winlogon要求LogonUI获取凭据。 LogonUI是一个托管凭据提供程序的过程。凭证提供者由" tile"表示。在登录屏幕上。有一些COM接口要实现,以便LogonUI要求您提供凭据。
要记住的重要事项是:
实现COM接口几乎不包括Java。
记录用户意味着为他获取安全令牌。但是以交互方式记录用户意味着您必须告诉Winlogon打开门。 Winlogon将为此监听的唯一过程是LogonUI。
换句话说,即使您拥有可以创建安全令牌的代码,您也无法使用它来解锁桌面。
顺便说一句,用于创建安全令牌的Windows API为LogonUser
。
您必须编写凭证提供程序。我从来没有听说过在Java中这样做,这是太平台特定和不可移植的。所有文档是否适用于C ++,但我听说它可以在.Net中完成。一个很好的起点是Platform SDK中的Credential Providers样本。
当您的凭据提供程序初始化时,您将生成一个等待某个事件的线程,例如显示的蓝牙设备。只要您可以与CP通信,就可以运行服务。
您还需要在ICredentialProvider::Advise
的实现中保存指向LogonUI事件机制的指针。
当您的硬件检测线程检测到您的蓝牙设备时,请让它呼叫ICredentialProviderEvents::CredentialsChanged
。它将告诉LogonUI再次通过所有凭据提供程序。调用时,您必须回答您是默认的自动登录提供程序。
唷!我们还没有登录!
最后一步是检索为该用户保存的密码,并在调用ICredentialProviderCredential::GetSerialization
时将其发送到LogonUI。
LogonUI将从那里获取它。它将指示Winlogon为您调用身份验证包并将用户登录。
This SO answer说同样的话,但它有点简洁。这个MSDM article比我的回答更完整。
+加密和管理用户的密码留作练习;)但您可能需要查看Data Protection API。
答案 1 :(得分:1)
正如ixe013回答解释了完成交互式登录的本地方式(也检查了这个SO Q&A),我花了一些时间研究logonExpert工具,该工具已经根据您的反馈成功完成了工作,该工具是用Borland Delphi编写的(与PEiD核实。
我不确定您是否注意到le.exe cmd工具,它使您能够以与logon.exe类似的方式按需调用它。 (通过阅读帮助chm文件找到)。
虽然我的回答没有添加有价值的技术亮点,但我认为你可能错过了cmd工具选项。
免责声明:我与logonexpert完全没有任何关系。
编辑:我刚刚发现MS SysinternalsSuite包含autologon工具,可以从cmd(自动登录用户域密码)调用。
答案 2 :(得分:0)
您还可以使用已存在的自动登录功能。
以管理员身份登录并执行(WIN-R):
控制userpasswords2
取消选中用户必须输入用户名和密码才能使用此计算机。
您的电脑仍可安全远程访问。