[英]Run cmd as administrator using java under Windows
使用 java,我運行 cmd 以便能夠執行 ttl 文件。
我的代碼:
try {
String[] command = new String[] {"cmd.exe", "/c", "cd C:\software\teraterm", "& TTPMacro C:\file\execute.ttl param1 param2 param3"};
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
} catch (Exception e) {
throw e;
}
但我希望 cmd 以管理員身份運行,所以我在我的代碼中添加了runas /savecred /user:.\\Administrator ,但它不再工作了:
try {
String[] command = new String[] {"cmd.exe", "/c", "runas /savecred /user:.\\Administrator", "cd C:\software\teraterm", "& TTPMacro C:\file\execute.ttl param1 param2 param3"};
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
} catch (Exception e) {
throw e;
}
這有什么問題?
我已更新代碼以檢查輸入流,但沒有輸出
try {
String[] command = new String[] {"cmd.exe", "/c", "runas /savecred /user:.\\Administrator", "cd C:\software\teraterm", "& TTPMacro C:\file\execute.ttl param1 param2 param3"};
Process p = Runtime.getRuntime().exec(command);
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String l;
while((l=br.readLine()) != null){
System.out.print(l);
}
p.waitFor();
} catch (Exception e) {
throw e;
}
Meta:雖然沒有說明,但是這個問答只針對Windows,在其他系統上沒用
runas
只能運行一個程序(帶參數); cd
是cmd
的內置函數,而不是程序。 此外cmdone & cmdtwo
是cmd
一個功能,不是runas
可以做的。 您需要將您的命令放入cmd /c
調用中,就像您直接從 Java Runtime.exec
(它也只能運行單個程序)運行時所做的一樣,只是runas
要求其運行程序恰好是一個參數,而不是可選的(重新)加入的幾個。 所以:
String[] command = new String[]{"runas","/user:administrator","/savecred", // these must be separated args
"cmd /c cd directory & executable data"}; // these must be all one argument
同樣在 Java 字符串文字中,反斜杠用作轉義字符,因此您必須將每個字符加倍(在路徑名或其他情況下)。
最后,如果runas
沒有已經保存的憑據,它會提示輸入密碼。 這個提示不是一行,所以你不能用BufferedReader.readLine()
讀取它。 您可以使用輸入流將其讀取為字節(到數組中),或使用InputStreamReader
讀取字符(同上)。 但是,作為一種黑客行為,由於runas
不會將自己的 stdhandles 傳遞給它的孩子,而是一個新的控制台窗口,因此您可以忽略提示並始終將密碼寫入p.getOutputStream()
無論是否需要,如果不是,它將被丟棄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.