如何通过C#启动Minecraft服务器,现有尝试代码无法运行该如何解决
实现方案
该需求可正常实现,你现有代码存在多处配置错误,修正逻辑如下:
错误点说明
FileName参数配置错误:你需要启动的程序是Java虚拟机,不应填写BuildTools.jar(该文件是Spigot服务端的构建工具,和启动逻辑无关)Arguments参数配置错误:不需要将java写入参数列表,仅需要填写java命令后续的参数内容,同时遗漏了原批处理中的-nogui启动参数- 缺少启动方法调用:没有执行
process.Start()触发进程启动 - 未配置必要的进程属性:缺少
UseShellExecute等适配配置,会导致进程启动失败
可运行参考代码
using System; using System.Diagnostics; namespace MinecraftServerStarter { class Program { static void Main(string[] args) { ProcessStartInfo processInfo = new ProcessStartInfo(); // 配置要启动的程序为Java,若环境变量未配置Java,可写完整路径,如@"C:\Program Files\Java\jdk-17\bin\java.exe" processInfo.FileName = "java"; // 配置Java启动参数,和批处理参数保持一致 processInfo.Arguments = "-Xmx1G -jar spigot-1.17.1.jar -nogui"; // 服务端文件所在的工作目录,要确保该路径下存在spigot-1.17.1.jar processInfo.WorkingDirectory = @"C:\Users\DD\Desktop\Offical MC\Shopping District\"; // 若需要和原批处理一样弹出独立CMD窗口运行,使用如下配置 processInfo.CreateNoWindow = false; processInfo.UseShellExecute = true; // 若后续需要在C#程序中直接读取服务端日志、发送指令,使用如下配置替换上面两行 // processInfo.CreateNoWindow = true; // processInfo.UseShellExecute = false; // processInfo.RedirectStandardInput = true; // processInfo.RedirectStandardOutput = true; // processInfo.RedirectStandardError = true; Process serverProcess = new Process(); serverProcess.StartInfo = processInfo; // 启动服务端进程 serverProcess.Start(); // 若需要等待服务端进程结束再退出当前程序,可加以下代码 // serverProcess.WaitForExit(); } } }
注意事项
- 请确认JDK17的路径已经正确配置到系统环境变量中,否则请将
FileName替换为JDK17目录下bin/java.exe的完整绝对路径 - 请确认
WorkingDirectory路径下确实存在spigot-1.17.1.jar文件,避免出现文件找不到的报错
内容的提问来源于stack exchange,提问作者Damien Davey
相关产品推荐
相关产品推荐

