Java 如何在Windows上使用另一个用户帐户创建新进程?

Java 如何在Windows上使用另一个用户帐户创建新进程?,java,windows,process,account,Java,Windows,Process,Account,是否可以使用不同的用户帐户在windows上创建新进程?我知道有一个上下文菜单“RunAs”,但我想从Java中实现它。我有用户名和密码。有一个名为“runas.exe”的程序。您可以运行该进程,并为进程和用户名/密码提供适当的参数。我认为这是最简单的方法。您需要使用编写DLL,因为纯Java代码无法做到这一点 DLL本身需要调用函数,以便在另一个用户的上下文中创建进程。要成功创建该进程,您需要为该函数提供一个访问令牌,该令牌本身是通过调用该函数创建的(需要用户名和密码来验证该其他用户)。RUN

是否可以使用不同的用户帐户在windows上创建新进程?我知道有一个上下文菜单“RunAs”,但我想从Java中实现它。我有用户名和密码。

有一个名为“runas.exe”的程序。您可以运行该进程,并为进程和用户名/密码提供适当的参数。我认为这是最简单的方法。

您需要使用编写DLL,因为纯Java代码无法做到这一点

DLL本身需要调用函数,以便在另一个用户的上下文中创建进程。要成功创建该进程,您需要为该函数提供一个访问令牌,该令牌本身是通过调用该函数创建的(需要用户名和密码来验证该其他用户)。

RUNAS具有“/savecred”开关,允许您仅在第一次输入凭据。一个潜在的问题是/SaveCred保存凭证时,它会在RUNAS调用该用户帐户时保存凭证。这可能是一个巨大的安全风险,所以小心使用它


示例在(结尾)

根据您的需要,Win32 API“”比“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 CreateProcessWithLogonW和CreateProcessWithTokenW函数是 与CreateProcessAsUser函数类似,只是调用方 不需要调用LogonUser函数来验证用户 拿个代币
我刚刚遇到了一个名为MiniRunAs的runas.exe程序的替代程序,它将在命令行上获取密码-


如果您能够将其与应用程序一起安装,那么这可能比编写JNI DLL更简单。

这主意不错,但不管用,因为您无法将密码传递给runas.exe。密码必须由用户输入。如果重定向进程输入,则运行方式将终止,并出现错误。是的,但您必须记住:“Windows XP with SP2、Windows Server 2003或更高版本:您不能从“LocalSystem”帐户下运行的进程调用CreateProcessWithLogonW,因为该函数使用调用方令牌中的登录SID以及LocalSystem“帐户不包含此SID。或者,使用CreateProcessAsUser和LogonUser函数