2011-01-17 8 views
2

から実行されている場合、私は現在、これを使用しての.batファイルからゲームサーバアプリケーションを起動...チェックしたJavaアプリケーションは、C#.NETの

java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui 

それが実行されている場合、私はチェックできるようにしたいと思いますかC#.NETアプリケーションからではありません。これを行う簡単な方法はありますか?

+0

私は一度に複数回実行しているので、プロセス名を確認することはできません。 –

+0

質問が不明:.NETプログラムがバッチファイルを呼び出したかどうかを確認するJavaプログラムが必要ですか? –

+0

彼の質問の要点は、バッチファイルによって起動されたjavaプロセスがC#アプリケーションからチェックしているかどうかを確認することでした。 –

答えて

0

.batファイルを使用してJavaを起動する代わりに、.NetからSystem.Diagnostics.Processを調べることを検討することもできます。プロセスに対処するためのあらゆる種類のメリットがあります。

ゲームサーバーを常に一定の時間にわたってチェックしたい場合は、ThreadまたはBackgroundWorkerのようなものを使用する必要がありますが、プロセスクラスは正しい方向にあなたを導くはずです。

これが役に立ちます。

3

クラスProcessを使用すると、Javaプロセスを見つけることができますが、実行中の内容を知ることはできません。少なくともこれを判断するには、コマンドラインを調べる必要があります。すべてのMinecraftサーバーが同じコマンドライン引数で起動されている場合は、WMIを使用して見つけることができます。必要な処理を実行するには、関連する関連プロセスオブジェクトを取得できます。

// find all java processes running Minecraft servers 
var query = 
    "SELECT ProcessId " 
    + "FROM Win32_Process " 
    + "WHERE Name = 'java.exe' " 
    + "AND CommandLine LIKE '%minecraft_server%'"; 

// get associated processes 
List<Process> servers = null; 
using (var results = new ManagementObjectSearcher(query).Get()) 
    servers = results.Cast<ManagementObject>() 
        .Select(mo => Process.GetProcessById((int)(uint)mo["ProcessId"])) 
        .ToList(); 

あなたはSystem.Management.dllライブラリへの参照を追加し、System.Management名前空間を使用する必要があります。

このようなプロセスの存在は、実行中であることを知るには十分です。 HasExitedなどの各プロセスのプロパティを調べるか、WaitForExit()を使用して終了するかどうかを判断することもできます。

関連する問題