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

是否有可能使用不同的用户帐户在Windows上创build新的进程? 我知道有一个上下文菜单“运行”,但我想从Java做。 我有用户名和密码。

您需要使用Java本地接口(JNI)编写DLL,因为您无法使用纯Java代码执行此操作。

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

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

我只是碰到了一个名为MiniRunAs的runas.exe程序的替代品,它将在命令行上输入密码 – http://www.source-code.biz/snippets/c/1.htm

如果你能够将它与你的应用程序一起安装,那可能比编写一个JNI DLL更简单。

根据您的需要,Win32 API“ CreateProcessWithLogonW ”比“CreateProcessAsUser / LogonUser”函​​数更容易使用。

来自MSDN Docs:

 CreateProcessWithLogonW和CreateProcessWithTokenW函数是
类似于CreateProcessAsUser函数,除了调用者 
不需要调用LogonUser函数来验证用户 
并获得一个令牌

RUNAS有“/ savecred”开关,让您只在第一次输入凭证。 一个潜在的问题是,当/ SaveCred保存凭证时,只要RUNAS调用该用户帐户,就会将其保存。 这可能是一个巨大的安全风险,所以要小心使用它!

示例在http://www.rgagnon.com/javadetails/java-0014.html (最后)