检查Java App是否从C#.NET运行

时间:2011-01-17 17:54:02

标签: c# java .net

我从目前正在使用此文件的.bat文件启动游戏服务器应用程序...

java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui

我希望能够从C#.NET应用程序检查它是否正在运行。有没有简单的方法呢?

2 个答案:

答案 0 :(得分:3)

使用Process类,您可以找到java进程,但是您无法分辨它们正在执行的内容。您至少需要能够检查其命令行以确定这一点。如果所有Minecraft服务器都使用相同的命令行参数启动,则可以使用WMI进行查找。如果要执行所需的操作,可以获取关联的Process对象。

// 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()等待它来确定是否以及何时结束。

答案 1 :(得分:0)

您可以考虑从.Net查看System.Diagnostics.Process,而不是使用.bat文件来启动java。它有各种各样的好处来处理流程。

如果您想在一段时间内不断检查游戏服务器,您可能必须使用某种ThreadBackgroundWorker,但Process类应该引导你朝着正确的方向前进。

希望这有帮助。