是否可以在具有不同用户帐户的Windows上创建新流程?我知道有一个上下文菜单“Run as”但我想用Java做。我有用户名和密码。
答案 0 :(得分:6)
您需要使用Java Native Interface (JNI)编写DLL,因为您无法使用纯Java代码执行此操作。
DLL本身需要调用 CreateProcessAsUser 函数在另一个用户的上下文中创建进程。要成功创建该进程,您需要为该函数提供一个访问令牌,该函数本身是通过调用LogonUser函数创建的(它需要用户名和密码来验证其他用户)。
答案 1 :(得分:4)
有一个名为“runas.exe”的程序。您可以运行该过程并为您的进程和用户名/密码提供适当的参数。我认为这是最简单的方法。
答案 2 :(得分:2)
我刚刚遇到了一个名为MiniRunAs的runas.exe程序的替代程序,该程序将在命令行上获取密码 - http://www.source-code.biz/snippets/c/1.htm
如果您能够将其与应用程序一起安装,那么这可能比编写JNI DLL简单。
答案 3 :(得分:1)
根据您的需要,Win32 API“CreateProcessWithLogonW”比“CreateProcessAsUser / LogonUser”功能更易于使用。
来自MSDN文档:
The CreateProcessWithLogonW and CreateProcessWithTokenW functions are similar to the CreateProcessAsUser function, except that the caller does not need to call the LogonUser function to authenticate the user and get a token
答案 4 :(得分:0)
RUNAS有“/ savecred”开关,只允许您第一次输入凭据。一个潜在的问题是,当/ SaveCred保存凭据时,它会在RUNAS调用该用户帐户时保存它。这可能是一个巨大的安全风险,所以要小心使用它!