我从目前正在使用此文件的.bat文件启动游戏服务器应用程序...
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
我希望能够从C#.NET应用程序检查它是否正在运行。有没有简单的方法呢?
答案 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。它有各种各样的好处来处理流程。
如果您想在一段时间内不断检查游戏服务器,您可能必须使用某种Thread或BackgroundWorker,但Process类应该引导你朝着正确的方向前进。
希望这有帮助。