2009-05-26 10 views
2

私は、java.jarサーバーを実行する必要があるプログラムを作成しています。出力をテキストボックスに書き換えることができるように、プロセスを直接実行する必要があり、オールインワンには完全に制御できます。私はCMD.exeを使ってやってみましたが、CMD.exeが新しいプロセスjava.exeを呼び出すだけで、それを制御することはできないので、そのことはうまくいきません。 java.exeを直接呼び出す必要がありますので、コントロールを取得して出力を取得できます。 C#でプロセスを作成して呼び出すことができるように、このコマンドをどのように変換するか教えていただけますか?C#:このコマンドラインをjava.exeに直接実行するには?

は、私が変換され、このCMDコマンドが必要になります。

"のjava -cp -Xmx1024m ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer"

コマンドライン私はProcess.Argumentsに入れることができるので、Java.exeを直接呼び出すことができます。

私はそれをやろうとしました...それはうまくいきません。

私はこれを何時間も見てきました。誰か助けてください!

+0

ここまでの内容を表示できますか? – Joey

答えて

4

フレームワークのドキュメントによると、プロセスを使用しても、PATH環境変数に対して常に問題が解決されるとは限りません。

private void LocateJava() 
    { 
     String path = Environment.GetEnvironmentVariable("path"); 
     String[] folders = path.Split(';'); 
     foreach (String folder in folders) 
     { 
      if (File.Exists(folder + "java.exe")) 
      { 
       this._javadir = folder; 
       return; 
      } 
      else if (File.Exists(folder + "\\java.exe")) 
      { 
       this._javadir = folder + "\\"; 
       return; 
      } 
     } 
    } 

それはややハックだが、それはのjava.exeはJavaランタイムを提供見つける:あなたはJavaはその後、そうでない場合は、次のような機能を使用し、java.exeへのフルパスを使用しているフォルダの名前を知っている場合がインストールされていて、そのフォルダはWindowsのPATH変数にあります。初めてこのプログラムをJavaで検索する必要があるときにこの関数を呼び出すと、次のコードを使用してJavaを起動します。

//Prepare the Process 
    ProcessStartInfo start = new ProcessStartInfo(); 
    if (!_javadir.Equals(String.Empty)) { 
     start.FileName = this._javadir + "java.exe"; 
    } else { 
     start.FileName = "java.exe"; 
    } 
    start.Arguments = "-Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer"; 
    start.UseShellExecute = false; 
    start.RedirectStandardInput = true; 
    start.RedirectStandardOutput = true; 

    //Start the Process 
    Process java = new Process(); 
    java.StartInfo = start; 
    java.Start(); 

    //Read/Write to/from Standard Input and Output as required using: 
    java.StandardInput; 
    java.StandardOutput; 
関連する問題