You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过编程方式获取Steam应用的clienticon哈希值(C#实现遇到问题求助)

如何通过编程方式获取Steam应用的clienticon哈希值(C#实现遇到问题求助)

嘿,我完全懂你现在的头疼事儿——想在C#里拿Steam应用的clienticon哈希(就是SteamDB上显示的那个clienticon字段,不是普通图标),试着用C#调用CMD执行SteamCMD命令,把结果输出到文本,但要么输出不完整,要么一半时间还会提示“No app info for AppID 1382070 found, requesting...”,对吧?

先给你捋捋你当前命令里的两个关键问题:

  • 你用了+app_info_update 1382070,但这个参数的正确用法是+app_info_update 1——这里的1是强制触发所有应用信息的更新,而不是填AppID,填AppID是无效的,这大概率是你一半时间拿不到信息的原因。
  • SteamCMD获取应用信息需要一点时间下载/缓存,你直接加+quit可能导致进程还没完成信息获取就退出了,所以输出会不完整。

接下来给你一套可行的解决方案:

第一步:修正SteamCMD命令

正确的命令应该加上匿名登录(大部分公开应用都需要这个才能获取信息),并且修正app_info_update的参数:

steamcmd +login anonymous +app_info_update 1 +app_info_print 1382070 +quit 1> _output.txt 2>&1

第二步:C#调用时优化进程逻辑

在C#里调用SteamCMD时,不要让进程立刻退出,要给它足够的时间完成信息获取,同时读取输出和错误信息方便排查问题。这里给你一段示例代码:

using System;
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        // 替换成你的SteamCMD路径和输出文件路径
        string steamCmdPath = @"C:\shit\SteamCMD\steamcmd.exe";
        string outputFilePath = @"C:\your\output\path\_output.txt";
        string targetAppId = "1382070";

        var startInfo = new ProcessStartInfo
        {
            FileName = steamCmdPath,
            Arguments = $"+login anonymous +app_info_update 1 +app_info_print {targetAppId} +quit",
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            WorkingDirectory = Path.GetDirectoryName(steamCmdPath) // 确保SteamCMD在自己的目录运行
        };

        using (var process = Process.Start(startInfo))
        {
            if (process == null)
            {
                Console.WriteLine("启动SteamCMD失败,请检查路径是否正确");
                return;
            }

            // 设置超时时间(比如30秒),避免进程卡住
            if (!process.WaitForExit(30000))
            {
                process.Kill();
                Console.WriteLine("SteamCMD执行超时,可能是网络或服务器问题");
                return;
            }

            // 读取所有输出和错误信息
            string output = process.StandardOutput.ReadToEnd();
            string error = process.StandardError.ReadToEnd();

            // 把结果写入文件
            File.WriteAllText(outputFilePath, $"{output}\n\n错误信息:\n{error}");

            // 解析输出中的clienticon哈希
            var iconMatch = System.Text.RegularExpressions.Regex.Match(output, @"clienticon\s+""([^""]+)""");
            if (iconMatch.Success)
            {
                string clientIconHash = iconMatch.Groups[1].Value;
                Console.WriteLine($"成功获取到clienticon哈希:{clientIconHash}");
            }
            else
            {
                Console.WriteLine("未找到clienticon字段,可能是应用未公开或需要登录非匿名账号");
            }
        }
    }
}

额外注意事项

  • 先手动运行一次SteamCMD,让它自动更新到最新版本,旧版本可能存在兼容性问题。
  • 如果第一次运行没获取到信息,可以重试一次——SteamCMD有时候第一次只是提交请求,第二次才会缓存下应用信息。
  • 极少数应用可能需要登录你的Steam账号(把+login anonymous换成+login 你的账号名 密码)才能获取信息,但不建议在代码里硬编码密码,可以考虑用交互式登录或者Steam的其他API。

备注:内容来源于stack exchange,提问作者CalpolMan

火山引擎 最新活动