11

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

4

5 回答 5

6

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

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

于 2008-12-12T08:54:02.043 回答
4

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

于 2008-12-12T08:22:54.540 回答
2

我刚刚遇到了一个名为 MiniRunAs 的 runas.exe 程序的替代方案,它将在命令行上获取密码 - http://www.source-code.biz/snippets/c/1.htm

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

于 2010-02-22T05:12:34.093 回答
1

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

来自 MSDN 文档:

CreateProcessWithLogonW 和 CreateProcessWithTokenW 函数是
类似于 CreateProcessAsUser 函数,除了调用者
不需要调用 LogonUser 函数来验证用户
并获得一个令牌
于 2008-12-20T22:54:09.877 回答
0

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

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

于 2008-12-20T21:41:34.047 回答