You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读写内存开发武器菜单遇IndexOutOfRangeException求助

解决System.IndexOutOfRangeException异常(进程获取失败)

问题根源

报错行Process.GetProcessesByName("00004D48-FiveM_GTAProcess.exe")[0];触发数组索引越界,本质是GetProcessesByName返回了空数组——系统中找不到名称为00004D48-FiveM_GTAProcess.exe的进程。

排查与解决步骤

1. 确认进程名称的正确性

  • 打开任务管理器,切换到详细信息标签,找到FiveM对应的进程,查看其真实名称。00004D48-大概率是动态生成的前缀,实际进程名可能是FiveM_GTAProcess.exe。
  • 可以先在代码中打印所有匹配的进程,验证名称是否正确:
    var processes = Process.GetProcessesByName("FiveM_GTAProcess");
    foreach(var p in processes)
    {
        Console.WriteLine($"找到进程:{p.ProcessName}");
    }
    

2. 安全获取进程,避免索引越界

不要直接通过[0]取数组元素,先判断数组长度,处理进程不存在的情况:

Process[] processes = Process.GetProcessesByName("FiveM_GTAProcess.exe"); // 替换为实际进程名
if (processes.Length == 0)
{
    MessageBox.Show("未找到目标进程,请确认FiveM已运行");
    return;
}
Process process = processes[0];

3. 其他潜在问题修正

除了进程获取,代码还有几个需要优化的点:

  • 权限问题:OpenProcess使用PROCESS_ALL_ACCESS需要程序以管理员身份运行,否则可能获取句柄失败。建议提示用户右键以管理员启动程序。
  • 内存地址溢出:将uint类型的地址转成int可能导致溢出,应该用IntPtr存储内存地址:
    uint vIn = 0xA2719263;
    IntPtr targetAddress = (IntPtr)vIn;
    
  • 资源泄漏:获取进程句柄后,记得调用CloseHandle(processHandle)释放资源,避免句柄泄漏。

修改后的完整示例代码

private void WeaponPistol_Click(object sender, EventArgs e)
{
    uint vIn = 0xA2719263;
    IntPtr targetAddress = (IntPtr)vIn;

    // 安全获取进程
    Process[] processes = Process.GetProcessesByName("FiveM_GTAProcess.exe");
    if (processes.Length == 0)
    {
        MessageBox.Show("未找到FiveM进程,请确保游戏已启动");
        return;
    }
    Process process = processes[0];

    // 获取进程句柄
    IntPtr processHandle = OpenProcess(PROCESS_ALL_ACCESS, false, process.Id);
    if (processHandle == IntPtr.Zero)
    {
        MessageBox.Show("获取进程句柄失败,请以管理员身份运行程序");
        return;
    }

    int bytesWritten = 0;
    byte[] buffer = Encoding.Unicode.GetBytes("WEAPON_PISTOL\0");
    bool writeSuccess = WriteProcessMemory(processHandle, targetAddress, buffer, buffer.Length, ref bytesWritten);

    if (!writeSuccess)
    {
        MessageBox.Show("写入内存失败");
    }

    // 释放句柄
    CloseHandle(processHandle);
}

注意:FiveM作为联机游戏,直接修改内存可能违反用户协议,导致账号封禁,请谨慎操作。

内容的提问来源于stack exchange,提问作者NicoDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:28