如何使用Windows上的其他用户帐户创建新进程?
答
您需要编写一个使用Java Native Interface (JNI)的DLL,因为您无法使用纯Java代码执行此操作。
DLL本身需要调用CreateProcessAsUser函数来在另一个用户的上下文中创建一个进程。要成功创建该进程,您需要为函数提供访问令牌,该令牌本身通过调用LogonUser函数(它需要用户名和密码来验证其他用户)来创建。
答
有一个名为“runas.exe”的程序。您可以运行该流程并为您的流程和用户名/密码提供适当的参数。我认为这是最简单的方法。
答
RUNAS拥有“/ savecred”开关,可让您只在第一次输入凭证。一个潜在的问题是,当/ SaveCred保存凭证时,只要RUNAS调用该用户帐户,就会将其保存。这可能是一个巨大的安全风险,所以要小心使用它!
答
根据您的需求在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
答
我对面的替代runas.exe程序调用MiniRunAs将于密码在命令行中运行 - http://www.source-code.biz/snippets/c/1.htm
如果你能够安装它与您的应用程序一起,可能比编写JNI DLL更简单。
不错的想法,但这不起作用,因为你无法将密码传递给runas.exe。密码必须由用户输入。如果重定向进程输入,runas会以错误结束。 – Horcrux7 2008-12-15 13:42:48