使用Process.Start()启动模拟器加载游戏失败,求命令行解决方案
命令行配置问题排查与修复
问题点分析
- 参数拼接缺少分隔空格:原代码中
commandline直接将核心路径与ROM路径拼接,两者之间没有空格,导致模拟器无法区分核心参数和ROM文件路径。 - 引号使用错误:调用
Process.Start时给参数添加了未闭合的前引号,造成命令行语法解析混乱,模拟器无法识别有效参数。 - 路径未做空格兼容处理:若ROM文件名包含空格,未加引号的路径会被拆解为多个参数,导致模拟器找不到目标ROM。
- 冗余字符串转换:
RomfilesList.Text.ToString()和".zip".ToString()属于多余操作,Text属性本身就是字符串类型,无需额外转换。
修正后的代码
private void StartGame() { string romPath = $"ROMFILES\\{RomfilesList.Text}.zip"; string emulatorPath = @"EMULATOR\retroarch.exe"; if (!File.Exists(emulatorPath)) { MessageBox.Show("Emulator is required to continue.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 正确拼接参数:-L 核心路径 空格 ROM路径,路径加引号兼容空格场景 string arguments = $"-L \"cores\\genesis_plus_gx_libretro.dll\" \"{romPath}\""; Process.Start(emulatorPath, arguments); }
修正说明
- 用字符串插值简化路径拼接,移除冗余的
ToString()调用。 - 合并判断逻辑并添加
return,避免无效代码执行。 - 给核心路径和ROM路径分别添加双引号,确保含空格的路径能被模拟器正确识别。
- 参数间用空格明确分隔,保证模拟器能正确解析
-L参数、核心文件、ROM文件三个独立部分。
内容的提问来源于stack exchange,提问作者Arthur Valenca
相关产品推荐
相关产品推荐

