Vig*_*ala 2 java windows startupscript windows-7 autologin
我一直在尝试编写脚本批处理文件或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.
Run Code Online (Sandbox Code Playgroud)
它告诉该文件应该以管理员身份运行.
这是我的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
我还尝试使用LogonExpert使用AutoLogon
上面的工具工作得很好.但我需要的是只在需要时使用java登录.
请帮帮我们......
你想要做的是可行的,但你必须遵守规则,不包括Java.这是一个小历史,为什么你当前的尝试不起作用,以及如何解决它.
这并不容易.
首先,从Windows Vista开始,Windows获取凭据的方式发生了根本性的变化.您提到的logon.exe实用程序使用旧的体系结构.那时,你可以做任何你想做的事情,因为任何摆弄登录架构的东西都是在Winlogon的进程中作为DLL运行的.您可能已经找到了一些自定义GINA,就像我写的那样.它们在最新版本的Windows中被忽略.
如今,Winlogon要求LogonUI获取凭据.LogonUI是一个托管凭据提供程序的进程.凭证提供程序由登录屏幕上的"磁贴"表示.有一些COM接口要实现,以便LogonUI要求您提供凭据.
要记住的重要事项是:
实现COM接口几乎排除了Java.
记录用户意味着为他获取安全令牌.但是以交互方式记录用户意味着您必须告诉Winlogon打开门.Winlogon将监听的唯一进程是LogonUI.
换句话说,即使您拥有可以创建安全令牌的代码,您也无法使用它来解锁桌面.
LogonUser顺便说一句,用于创建安全令牌的Windows API .
您必须编写凭证提供程序.我从来没有听说过在Java中这样做,这是太平台特定和不可移植的.所有文档是否适用于C++,但我听说它可以在.Net中完成.一个很好的起点是Platform SDK中的Credential Providers示例.
当您的凭据提供程序初始化时,您将生成一个等待某些事件的线程,例如显示的蓝牙设备.只要您可以与CP通信,就可以运行服务.
您还需要在实现中保存指向LogonUI事件机制的指针ICredentialProvider::Advise.
当您的硬件检测线程检测到您的蓝牙设备时,请进行呼叫ICredentialProviderEvents::CredentialsChanged.它将告诉LogonUI再次通过所有凭据提供程序.调用时,您必须回答您是默认的自动登录提供程序.
唷!我们还没有登录!
最后一步是检索为该用户保存的密码,并在ICredentialProviderCredential::GetSerialization调用时将其发送到LogonUI .
LogonUI将从那里获取它.它将指示Winlogon为您调用身份验证包并将用户登录.
这个SO答案说的是同样的事情,但它有点简洁.这篇MSDM文章比我的答案更完整.
+加密和管理用户的密码留作练习;)但您可能需要查看Data Protection API.