2008-12-12 87 views

回答

6

您需要編寫一個使用Java Native Interface (JNI)的DLL,因爲您無法使用純Java代碼執行此操作。

DLL本身需要調用CreateProcessAsUser函數來在另一個用戶的上下文中創建一個進程。要成功創建該進程,您需要爲函數提供訪問令牌,該令牌本身通過調用LogonUser函數(它需要用戶名和密碼來驗證其他用戶)來創建。

4

有一個名爲「runas.exe」的程序。您可以運行該流程併爲您的流程和用戶名/密碼提供適當的參數。我認爲這是最簡單的方法。

+1

不錯的想法,但這不起作用,因爲你無法將密碼傳遞給runas.exe。密碼必須由用戶輸入。如果重定向進程輸入,runas會以錯誤結束。 – Horcrux7 2008-12-15 13:42:48

0

RUNAS擁有「/ savecred」開關,可讓您只在第一次輸入憑證。一個潛在的問題是,當/ SaveCred保存憑證時,只要RUNAS調用該用戶帳戶,就會將其保存。這可能是一個巨大的安全風險,所以要小心使用它!

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

1

根據您的需求在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 
2

我對面的替代runas.exe程序調用MiniRunAs將於密碼在命令行中運行 - http://www.source-code.biz/snippets/c/1.htm

如果你能夠安裝它與您的應用程序一起,可能比編寫JNI DLL更簡單。

相關問題