如何通过编程方式获取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




