JAVAでSquidを起動させたいのですが...
このコードだとjavaのコンソールにはエラーがなく、squidが実行されていません.
java側から管理者権限でコマンドプロンプトを実行することは可能なのでしょうか?
追記編集 環境Windows10 eclipse
検証したこと
もう一つのmethod execCommandReturnの使用。eclipseを管理者権限で実行、exeファイルにして、管理者権限で実行。(後に.exeにしたい)
現在使用しているjavaのコード
java
1import java.io.BufferedReader; 2import java.io.BufferedWriter; 3import java.io.File; 4import java.io.FileWriter; 5import java.io.IOException; 6import java.io.InputStreamReader; 7import java.io.PrintWriter; 8import java.io.Reader; 9import java.io.StringWriter; 10 11 12public class cmdcmdcmd{ 13//mothodが動くかどうかの確認のためのメインメソッド。 14 public static void main (String[]args) throws InterruptedException, IOException{ 15 execCommandNotReturn("net start squid"); 16 17 } 18 19 //戻り値がない、コマンドをただ実行すだけのメソッド cm:コマンドプロンプトで実行するコマンド 20 public static void execCommandNotReturn(String cm) throws InterruptedException, 21 IOException { 22 //コマンドプロンプトを起動してコマンド実行 23 ProcessBuilder pb = new ProcessBuilder("cmd", "/C", cm); 24 Process p = pb.start(); 25 p.waitFor(); 26 p.destroy(); 27 } 28 29 //戻り値なし、コマンドを実行してfilePathで指定したテキストに出力結果を保存するメソッド 30 //cm:コマンドプロンプトで実行するコマンド filePath:ファイルのパスを指定(絶対パス) 31 public static boolean execCommandReturn(String cm,String filePath)throws InterruptedException,IOException{ 32 boolean status = false; 33 //messageは、ファイルが存在しないか、IOExeptionかどちらのエラーかを見極めるための変数 34 String message; 35 // /Cはコマンドプロンプトを閉じながら実行するやつ 36 ProcessBuilder pb = new ProcessBuilder("cmd", "/C", cm); 37 Process p = pb.start(); 38 //実行されたコマンドの出力結果をバッファに読み込み 39 BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 40 //Catcherのクラスにbrの領域を作る 41 Catcher c = new Catcher(br); 42 //Catcherをスタート 43 c.start(); 44 //コマンドプロンプトのキャッシュを破棄 45 p.waitFor(); 46 p.destroy(); 47 48 49 //textへの書き込み 50 try{ 51 File file = new File(filePath); 52 //ファイルが存在し、書き込み権限があるならtrue,ないならfalseを返すcheckBeforWriteFileメソッドを使い判定 53 if (checkBeforeWritefile(file)){ 54 PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 55 //テキストファイルにコマンドプロンプトの出力結果を出力 56 pw.println(c.out.toString()); 57 pw.close(); 58 status = true; 59 message="正常"; 60 }else{ 61 message="ファイルに書き込めません" ; 62 } 63 }catch(IOException e){ 64 message=e.toString(); 65 } 66 return status; 67 68 69 70 } 71 //ファイルが存在したらtrue存在しなかったらfalseを返すメソッド 72 private static boolean checkBeforeWritefile(File file){ 73 if (file.exists()){ 74 if (file.isFile() && file.canWrite()){ 75 return true; 76 } 77 } 78 79 return false; 80 } 81 82} 83//コマンドプロンプトの出力結果を読み込むために必要なクラス。 84class Catcher extends Thread { 85 Reader in; 86 StringWriter out = new StringWriter(); 87 public Catcher(Reader in) { 88 this.in = in; 89 } 90 91 public void run() { 92 int c; 93 try { 94 while ((c = in.read()) != -1) { 95 out.write((char)c); 96 } 97 } catch (IOException e) { 98 e.printStackTrace(); 99 } 100 } 101} 102
回答1件
あなたの回答
tips
プレビュー