質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

926閲覧

javaでsquid(仮想プロキシ)を起動させたい

hci9sd93hiwslgc

総合スコア7

Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2018/02/06 10:09

編集2018/02/06 12:03

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/02/06 11:08

cmd /c とか net start とかありますが、Windows 環境でしょうか?
hci9sd93hiwslgc

2018/02/06 11:49

質問ありがとうございます。Windows環境です。
guest

回答1

0

自己解決

※(コマンドプロンプトでexeを実行するjavaコードをexeファイル)にしてそのexeファイルを実行するプログラムを作ったことで解決しました。

下記:※を実行するjavaコード
execCommandNotReturn("@powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process C:\startSquid.exe -Verb runas"");

投稿2018/02/07 03:07

hci9sd93hiwslgc

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問