2017-09-30 21 views
1

私のJavaプログラムからのSETコマンドだけを持つアプリケーションインストール場所から.batファイルを実行する必要があります。私はProcessBuilderプロセスに.bat環境変数を設定する方法

以下
ProcessBuilder pb = new ProcessBuilder("cmd", "/c","C:\\apps\\vars.bat"); 
pb.command("C:\\apps\\test.exe","-u=user1", "-p=pwd1"); 
pb.redirectErrorStream(true); 
pb.redirectOutput(outputFile); 
Process process = pb.start(); 
try { 
    process.waitFor(); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
process.getOutputStream().close(); 
InputStream is = process.getInputStream(); 
BufferedReader in = new BufferedReader(new InputStreamReader(is)); 
String inputLine; 
while ((inputLine = in.readLine()) != null) { 
    System.out.println(inputLine); 
} 

以下のように実行しようとした

がVARS.BATコンテンツである

@rem Defined by Install. Please Do NOT Remove The Following Lines. 
set VAR1=110002020150715 
set DB_CONNECT=test 
set DB_SERVER=localhost 
set ORACLE_SID=test 
set XML_ENCODING=ISO-8859-1 

問題は、Javaプログラムは、.BATファイルで設定した環境変数のいずれかを認識していないです。

vars.batとtest.exeはどちらもアプリケーションのインストール場所です。 test.exeを実行するには、まずvars.batを実行する必要があります.Exeが.batファイルに設定された変数を使用してアプリケーションに接続するためです。

.Batファイルに設定された環境変数をProcessBuilder 。

+0

Javaプログラムが.batファイルで設定した環境変数を認識しないことをどのように知っていますか。この 'System.out.println(System.getenv(" JAVA_HOME "));'をチェックし、同じ方法で.batに設定したenv varを出力しようとします。 –

+0

印刷のヌル値 – Mohan

+0

@Mohanあなたの質問を編集して、 'C:\ apps \ vars.bat'ファイルの内容を追加してください。また、Javaプログラムの完全なソースコードを追加して、環境変数を読み込もうとします。 – Progman

答えて

1

ProcessBuilderは、開始するプロセスを準備するために使用されます。 ProcessBuildは、実行するコマンドを1つだけ設定します。 command()を使用すると、実行するコマンドが設定/変更されるため、前のコマンドは実行されません。あなたの "vars.bat"コマンドも "test.exe"プログラムもまだ実行されていないことを覚えておいてください。返されたProcessオブジェクトで作業できるstart()メソッドを呼び出すときにのみ実行されます。

"test.exe"ファイルの前に "vars.bat"ファイルを実行するには、両方のコマンドを実行する別の "bat"ファイルを作成する必要があります。こうすることで、同じ環境/シェル/実行/コンテナ/プロセスで実行されます。スタートディレクトリとして

vars.bat 
test.exe -u=user1 -p=pwd1 

を実行し、インストールディレクトリで、この「バット」ファイルまたはこれらのファイルへの絶対パスを使用しますので、以下の内容で新しい「バット」ファイルを作成します。それでは、あなたが以前にしたように、この新しい "バット"ファイルをProcessBuilderProcessで実行することができます。

関連する問題