是否可以使用不同的用户帐户在Windows上创建新进程?我知道有一个上下文菜单“运行方式”,但我想从Java中完成。我有用户名和密码。
8tntrjer1#
您需要使用Java Native Interface (JNI)编写DLL,因为您无法使用纯Java代码完成此操作。DLL本身需要调用**CreateProcessAsUser**函数来在另一个用户的上下文中创建进程。要成功创建该进程,您需要为该函数提供访问令牌,该令牌本身是通过调用LogonUser函数创建的(它使用用户名和密码来验证其他用户)。
35g0bw712#
有一个名为“runas.exe”的程序。您可以运行该进程并为您的进程和用户名/密码提供适当的参数。我认为这是最简单的方法。
xxhby3vn3#
我刚刚遇到了runas.exe程序的一个替代方案,名为MiniRunAs,它将在命令行上获取密码-http://www.source-code.biz/snippets/c/1.htm如果您能够将它与应用程序沿着安装,那么这可能比编写JNI DLL更简单。
ryhaxcpt4#
根据您的需要,Win32 API“CreateProcessWithLogonW”比“CreateProcessAsUser / LogonUser”函数更容易使用。MSDN Docs:
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
zf9nrax15#
锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。
RUNAS有一个“/savecred”开关,它只允许您第一次输入凭证。一个潜在的问题是,当/SaveCred保存凭证时,它会保存它,以便RUNAS在任何时候调用该用户帐户。这可能是一个巨大的安全风险,所以要小心使用它!
5条答案
按热度按时间8tntrjer1#
您需要使用Java Native Interface (JNI)编写DLL,因为您无法使用纯Java代码完成此操作。
DLL本身需要调用**CreateProcessAsUser**函数来在另一个用户的上下文中创建进程。要成功创建该进程,您需要为该函数提供访问令牌,该令牌本身是通过调用LogonUser函数创建的(它使用用户名和密码来验证其他用户)。
35g0bw712#
有一个名为“runas.exe”的程序。您可以运行该进程并为您的进程和用户名/密码提供适当的参数。我认为这是最简单的方法。
xxhby3vn3#
我刚刚遇到了runas.exe程序的一个替代方案,名为MiniRunAs,它将在命令行上获取密码-http://www.source-code.biz/snippets/c/1.htm
如果您能够将它与应用程序沿着安装,那么这可能比编写JNI DLL更简单。
ryhaxcpt4#
根据您的需要,Win32 API“CreateProcessWithLogonW”比“CreateProcessAsUser / LogonUser”函数更容易使用。
MSDN Docs:
zf9nrax15#
锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。
RUNAS有一个“/savecred”开关,它只允许您第一次输入凭证。一个潜在的问题是,当/SaveCred保存凭证时,它会保存它,以便RUNAS在任何时候调用该用户帐户。这可能是一个巨大的安全风险,所以要小心使用它!