Steamworks 文献库
上传至 Steam
SteamPipe 是 Valve 的工具,用于向 Steam 交付内容,以下是其使用指南。 若要了解更新您游戏的最佳实践的更多信息,请参见更新您的游戏——最佳实践

SteamPipe 内容系统简介

SteamPipe 是驱动 Steam 的游戏/应用程序内容系统。 SteamPipe 包括以下功能:
  • 高效且快捷的内容交付。
  • Public and private "beta" branches, allowing multiple builds to be tested.
  • 以网页为基础的生成版本管理简单易用——只需点击几次,即可推出新的生成版本或回滚至旧的生成版本。
  • 将生成版本设置上线前能够看到其更新大小。
  • 能够在多个应用程序之间分享内容。
  • 能够从公开或测试版内容生成安装光盘
  • 即使更新下载已经开始,游戏/应用也离线可用。
  • 所有内容永远加密,且未激活版本不会对顾客可见。
  • 可以在开发过程中使用的 SteamPipe 本地内容服务器
注意:有数个概念和 SteamPipe 是不可分割的,在开始之前,您应当熟悉一下应用程序文档中描述的所有概念。 就算只是大概了解各部分如何协调运作,也会对上传您的产品至 Steam 大有帮助。

Steamworks 视频教程:在 SteamPipe 中创建您的游戏

此教程对 SteamPipe 进行了介绍,并逐步讲解了如何通过 Steamworks 工具为 Steam 创建样本应用程序。
https://www.youtube.com/watch?v=SoNH-v6aU9Q

Steamworks 视频教程 – 添加新平台与语言

此教程带您了解如何通过为应用添加 Depot,使游戏支持新的平台和语言。
https://www.youtube.com/watch?v=PShS32hcing

SteamPipe 技术详情

SteamPipe 使用 HTTP 协议进行内容交付。 由于下载属于常规的网页流量,因此客户与 Steam 服务器之间的任何第三方 HTTP 缓存都会提高下载速度。 内容可以由外部 CDN 提供商托管,而 CDN 提供商可轻松添加至我们的内容网络。 大多数消费者使用的防火墙都允许 HTTP 流量,不会阻止下载。

SteamPipe 具有基于二进制增量的高效补丁算法,仅更改现有内容文件的修改部分。 此内容更新时,只需要发送这些增量。 这意味着开发人员和用户的传输量都更小,速度都更快。 大多数合作伙伴会发现没必要使用SteamPipe 本地内容服务器,因为他们可以高效地在私密分支上给生成版本打补丁。

Steam 生成版本帐户

在 Steam 上创建任何生成版本之前,您的 Steamworks 帐户中必须有一个拥有“编辑应用元数据”和“在 Steam 上发布应用更改”权限的 Steam 帐户。 出于安全考虑,建议您持有一个仅具备这些权限的生成版本专用帐户。您可以在 https://store.steampowered.com/join 为此创建一个新的 Steam 帐户。

您 Steamworks 帐户的任何管理员都可以添加 Steam 帐户并授予必要的权限。 关于此流程的更多信息可在管理您的 Steamworks 帐户文档中找到。 此帐户的示例如下:

create_build_account.png

新 SteamPipe 应用的初始设置

请按照以下步骤设置新的 SteamPipe 应用:
  1. 找到您应用程序的 app ID(可以通过在您的 Steamworks 主页上选择该应用程序来找到)。
  2. 前往您应用的通用安装设置页面。
  3. 定义至少一个启动选项,即路径以及启动游戏所需的任意参数(可选)。 Hover over the (?) to learn more about each field.

    The example below shows 5 launch options, 2 for Windows, 2 for macOS and 1 for Linux.
    Launch option 3 will only be shown on Windows if the user also owns the DLC specified.

    updatedlaunchoptions_3.png
  4. 前往 Depot 页面,根据需要为此应用添加 depot。默认情况下,您的应用程序可能已经配置了一个 depot。
    1. 点击默认 depot,将其名称更改为合适且易于识别的名称(例如“基础内容”或“Windows 内容”)。
    2. 除非这是针对特定语言的 depot,否则保持语言设置为[所有语言]。
    3. 除非这是针对特定操作系统的 depot,否则保持操作系统设置为[所有操作系统](如果应用适用于所有系统,或仅适用于 PC 或者 Mac,则保持设置为[所有操作系统])。 仅指定针对特定操作系统的游戏 depot。
    4. 点击添加新 Depot 以创建更多 depot。
    5. 点击保存以保存所做的所有更改。
  5. 完成对 depot 的定义后,前往发布页面发布您所做的更改。
  6. 您新定义的 depot 需要纳入程序包中,才能授予您 depot 的所有权。 Steam 上的每款游戏都有一个 Developer Comp 程序包,会自动授予给您发行商组中列出的帐户。
    您可以在关联程序包与 DLC 页面将新的 depot 添加至该程序包(和/或其他应有这些 depot 的程序包)。
Note: If your executable is in a sub-folder of the main installation folder, add the sub-folder name in the Executable field. 请勿使用前导斜杠或点。
Platform Note: As shown above, macOS applications may be launched by specifying either an app bundle (Game.app) or a script/binary (Game.app/Contents/MacOS/Game). In general the app bundle format should be preferred if possible as it allows macOS to more correctly determine launch parameters in the manner it would if launched manually outside of Steam.

One instance of this to note is that currently applications that are launched through an app bundle on Apple Silicon devices will launch the best architecture available in the application whereas direct binary launches will use the same architecture as the Steam process (currently x86_64).

为 SteamPipe 上传设置 SDK

Download and unzip the latest version of the Steamworks SDK on the machine you will be uploading builds on.

The SteamPipe tools can be found within the SDK in the tools folder which contains 2 relevant sub-directories.

The ContentBuilder directory is where your game content and SteamPipe build tools will live. This directory contains the following sub-directories:
  • builder - 此目录最初仅包含 steamcmd.exe,即 Steam 的命令行版。
  • builder_linux - steamcmd 的 Linux 版。
  • builder_osx - steamcmd 的 macOS 版。
  • content - 此目录包含所有将生成到 depot 中的游戏文件。
  • output - 此目录将是生成版本日志、区块缓存和中间输出所在的位置。 注意:此文件夹可以随时删除或清空,但是删除后,下一次上传将花费更长的时间。
  • scripts - 在此目录中,您将放置用于生成游戏 depot 的所有生成版本脚本。
steampipebuilddir.png

It's recommended that you run steamcmd.exe directly in the builder folder for your platform once to bootstrap your build system. This should populate your builder directory with all the files it needs to build depots.

The ContentServer directory contains the tools for running your own SteamPipe 本地内容服务器 if you choose to do so.

macOS 上的 SteamCmd

To enable SteamCmd on macOS you must complete the following steps:
  1. 在终端上,找到 tools\ContentBuilder\builder_osx\osx32 文件夹。
  2. 运行 chmod +x steamcmd。
  3. 向上找到父文件夹(tools\ContentBuilder\builder_osx)。
  4. 输入 bash ./steamcmd.sh。
  5. 然后,SteamCmd 将运行并更新到最新的生成版本,您将会看到 SteamCmd 提示。
  6. 输入“exit”并按下回车键以退出提示。
You can then follow the rest of this documentation (substituting paths as appropriate) to create depot and app config files for uploading your content to Steam.

创建 SteamPipe 生成版本配置文件

To upload files for your app with SteamPipe, you must create scripts which describe your build and each depot that will be included in it. The example scripts shown here are in the Tools\ContentBuilder\scripts folder in the Steamworks SDK.

SteamPipe GUI 工具

If you're running on Windows and would prefer a GUI tool to help create these config files and upload your builds you can use the SteamPipeGUI which is available in the tools folder of the Steamworks SDK. Included in the zip are additional instructions to get you started.

If you choose to use the GUI tool then reading the following sections is still recommended to help you become more familiar with how the SteamPipe system works.

简单生成版本脚本


Let's start with the most basic build script possible. In our example we have a game (AppID 1000) that has one depot (DepotID 1001) and want to upload all files from a content folder and it's subfolders. We just need a single build script for that, take a look at "simple_app_build.vdf" included in the SDK :

"AppBuild" { "AppID" "1000" // 您的 AppID "Desc" "This is a simple build script" // 此生成版本的内部描述 "ContentRoot" "..\content\" // 相对于此文件位置的根内容文件夹 "BuildOutput" "..\output\" // 生成版本日志和生成版本缓存文件的生成版本输出文件夹 "Depots" { "1001" // 您的 DepotID { "FileMapping" { "LocalPath" "*" // 来自内容根文件夹的所有文件 "DepotPath" "." // 映射到 depot 的根目录 "recursive" "1" // 包含所有子文件夹 } } } }

Adjust the AppID and DepotID for your game as needed. To kick off a build you need to run steamcmd and pass a couple of parameters :
tools\ContentBuilder\builder\steamcmd.exe +login <account_name> <password> +run_app_build ..\scripts\simple_app_build.vdf +quit

注意: Your first attempt at running a build may fail due to Steam Guard. If the login fails due to Steam Guard, check your email for the Steam Guard code, and run steamcmd as: steamcmd.exe "set_steam_guard_code <code>", and try again. After logging in with Steam Guard once, a sentry file is used to verify the login is genuine.

If you are using steamcmd from a machine or VM that gets re-imaged frequently, you should include the sentry and config file in your image so you won't be prompted for a Steam Guard every time. The sentry file is located in <Steam>\ssfn<hashOfNumbers>, and the config file is located in <Steam>\config\config.vdf.

The following steps occur during a SteamPipe build:
  1. Steamcmd.exe 会自我更新至最新版本。
  2. Steamcmd.exe 使用给定的用于创建生成版本的 Steam 帐户登录到 Steam 后端。
  3. 应用生成版本起始注册于 MDS(主 Depot 服务器),这将确保用户具有正确的权限来修改此应用。
  4. 对于应用生成版本中包含的每个 depot,会基于内容文件夹中的文件以及 depot 生成版本配置文件中定义的筛选规则,生成一个文件列表。
  5. 每个文件都经过扫描,并分割成约 1MB 的小型区块。 如果 depot 之前已经生成过,此分区将尽可能保留最多的区块不变。
  6. 对新的文件区块进行压缩、加密,然后上传到 MDS。
  7. 为此 depot 版本生成最终清单。每个清单由唯一的 64 位清单 ID 识别。
  8. 处理完所有 depot 后,MDS 会完成此应用生成版本的创建,并为其分配一个全局 BuildID。
  9. 生成版本完成后,生成版本输出文件夹中可能有 *.csm 和 *.csd 文件。 这些是临时文件,可以删除,但是它们可以缩短后续版本生成所用的时间。


Once the build is complete you can see it on your app builds page, in this case it would be https://partner.steamgames.com/apps/builds/1000. There you can set that build live for the default branch or any beta branch and users will be able to download this update with a couple of minutes.

高级生成版本脚本


If your app has a lot of depots with complex file mapping rules, you can create a depot build script for each depot which will be referenced by the app build script. First let's take a look at available parameters in the app build script:

  • AppID - 您游戏的 AppID。 进行上传的 Steam 合作伙伴帐户需要有“编辑应用元数据”权限。
  • Desc - 描述仅在应用管理员面板的“您的生成版本”栏目中对您可见, 在上传生成版本至“您的生成版本”页面后可以随时修改。
  • ContentRoot - 您游戏文件的根文件夹,可以是生成版本脚本文件的绝对或相对路径。
  • BuildOutput - 此目录将是生成版本日志、depot 清单、区块缓存以及中间输出所在的位置。 为获得最佳性能,请为您的生成脚本输出使用不同磁盘。 此举将拆分磁盘的 IO 工作负载,让您的内容根磁盘处理读取请求,而您的输出磁盘处理写入请求。
  • Preview - 此类型的生成脚本仅将日志和文件清单输出至生成版本输出文件夹。 创建预览生成版本是对您的上传脚本进行循环访问的好方法,可以确保您的文件映射、筛选器及属性按预期工作。
  • Local - 将此参数设置进您的 SteamPipe 本地内容服务器(LCS)htdocs 路径中。 LCS 生成版本仅将内容放入您自己的 HTTP 服务器,并允许您用 Steam 客户端测试您游戏的安装情况。
  • SetLive - 生成版本发布成功后,测试版分支名称将自动设置为上线,如为空,则无生成版本。 请注意,“默认”分支无法设置为自动上线, 必须通过应用管理员面板进行。
  • Depots - 此栏目包含每个 depot 的所有文件映射、筛选器以及文件属性,或是为每个 depot 引用单独的脚本文件。

Example app build script "app_build_1000.vdf" is using all options:
"AppBuild" { "AppID" "1000" // 您的 AppID "Desc" "Your build description here" // 此生成版本的内部描述 "Preview" "1" // 只将此作为一个预览生成版本,未上传任何内容 "Local" "..\..\ContentServer\htdocs" // 将内容放入本地内容服务器,而不是上传至 Steam "SetLive" "AlphaTest" // 将此生成版本设置为在测试版分支上线 "ContentRoot" "..\content\" // 相对于此脚本文件的内容根文件夹 "BuildOutput" "D:\build_output\" // 将生成版本缓存和日志文件放入另一个驱动器,以获得更佳性能 "Depots" { // 每个 depot 的文件映射说明位于单独的脚本文件中 "1001" "depot_build_1001.vdf" "1002" "depot_build_1002.vdf" } }

This app build script references two depot build script files that specify all file mappings and file properties. The following instructions are available in a depot build script ( and also if the section is included directly into the app build script).

  • DepotID - 此栏目的 DepotID。
  • ContentRoot - 让您按 depot 从应用生成版本脚本覆盖 ContentRoot 文件夹(可选)。
  • FileMapping - 将单个文件或一组文件从本地内容根映射至您的 depot。 可以有多个将文件添加至 depot 的文件映射。 LocalPath 参数是内容根文件夹的相对路径,可能包含像是“?”或“*”的通配符。 如果启用 Recursive,也会在子文件夹里映射文件时应用。 DepotPath 参数指定了选定的文件应该在 depot 中何处显示(无特殊映射则只使用“.”)。
  • FileExclusion - 会再次排除已映射的文件,也可以包含像是“?”或“*”的通配符。
  • InstallScript - 会将文件标记为安装脚本,并在生成版本过程中签署文件。 Steam 客户端知晓要为任何装载了此 depot 的应用程序运行这些文件。
  • FileProperties - 会用特殊标志对文件进行标记:
    • userconfig - 此文件由用户或游戏修改, 无法用更新覆盖;而且如果与文件此前版本不同,也不会触发验证错误。
    • versionedconfig - 与 userconfig 相似,但是如果文件在 depot 中已更新,则会在用户游戏更新时被本地覆盖。 在进行必须的格式更改或漏洞修复时,只更新 depot 中的文件。

Example depot build script depot_build_1002.vdf showing use of all options:
"DepotBuild" { "DepotID" "1002" "ContentRoot" "C:\content\depot1002" // 从应用生成版本脚本覆盖 ContentRoot "FileMapping" { // “.\bin”中的所有源文件和文件夹将会被映射至 depot 中的“.\executables” "LocalPath" "bin\*" "DepotPath" "executables\" "Recursive" "1" // 包含所有子文件夹 } "FileMapping" { // 用德语版本覆盖 \\audio 中的音频文件 "LocalPath" "localization\german\audio\*" "DepotPath" "audio\" } "FileMapping" { // 复制德语版本的安装脚本至 depot 根文件夹 "LocalPath" "localization\german\german_installscript.vdf" "DepotPath" "." } "FileExclusion" "bin\server.exe" // 排除此文件 "FileExclusion" "*.pdb" // 在所有地方排除所有 .PDB 文件 "FileExclusion" "bin\tools*" // 排除 bin\tools\ 下的所有文件 "InstallScript" "localization\german\german_installscript.vdf" "FileProperties" { "LocalPath" "bin\setup.cfg" "Attributes" "userconfig" // 此文件会在运行时中被修改 } }

注意: You can name these scripts what ever you want, but we use the names app_build_<AppID> and depot_build_<DepotID> for consistency. If you know that you'll be building apps on this machine, it might be a good idea to create sub-directories in your scripts directory for each application, to help organize each application's build scripts.

管理更新

After your app releases to customers, your customers will be receiving the build marked as the Default build. When uploading a new build it's always a good idea to test it before shipping it to your customers, for more information on how to successfully do this see 在 Steam 上进行测试.

调试生成版本问题

If your build wasn't successful, you should look in your output directory for error information, not the console where the build script was run. Most error information can be found in the *.log files.
You can use these Steam client commands and client-side files to debug issues:
  • “app_status [appid]” - 显示此客户端上应用的当前状态。
  • “app_info_print [appid]” - 显示此游戏当前的 Steamworks 配置(depot、启动选项,等等)。
  • “app_info_print [appid]” - 显示此游戏当前的用户配置(当前语言、安装目录,等等)。
  • 文件“logs\content_log.txt” - 列出所有已记录的 SteamPipe 操作和错误。
  • 文件:teamapps\appmanifest_[appid].acf” - 显示此应用当前的安装状态(KeyValues)。

为 SteamPipe 创建高效 Depot

The old Steam content system would patch updates on a file level, which meant that if a single byte in a file changed, the entire new file would be downloaded by all users. This was especially inefficient if the game used pack files, which are collections of game content files in a single big file. Pack files can easily exceed 1 GB, so updates often led to unnecessarily large downloads. A common way to avoid these large downloads was to add new pack files that overrode content of already shipped pack files. That worked for updates, but it hurt new users long-term, since they ended up downloading unused, already-patched content.

The new content system fixes this problem by splitting each file into roughly 1-MB chunks. Each chunk is then compressed and encrypted before being distributed by the Steam content system. If the game content has large redundant parts, these chunks are reused and the user only has to download each repeated chunk once. However, the real strength of this system is building efficient update patches. While the system is building a patch, the new content is scanned for already known chunks. If it finds them, it reuses them. This means if you change or inject a few bytes in a big file, the user only has to download the changes.

This works well in most cases, but there are still a few pitfalls that need to be avoided when designing the content layout of a game. You may not want to compress or encrypt your game data. This is already done for in-flight downloads and retail discs by the Steam content system. If you do it too, it can reduce the effectiveness of delta patching. Compression and encryption are only advised if each individual asset within a package file is separately compressed and/or encrypted. Otherwise, a change to one asset will always require downloading several other potentially unchanged assets.

If you package multiple assets in a pack file, make sure that with each re-packaging, no unnecessary changes are made. One problematic practice is including the full name of the original source files on disk, because the names may change, depending on the build machine. Another bad pattern is including build time stamps for each file. If possible, always add new content to the end of your pack files and keep the order of existing files. Also, keep your pack file’s metadata (offset and sizes to individual assets) in one place and don’t intersperse it with the asset data. Use a binary difference tool like BeyondCompare to look at two builds of your pack files to make sure that hundreds of unwanted changes don’t show up.

Using pack files is especially useful to package lots of small files (<1 MB) into a single larger file. This will improve download speed and disk IO performance. But you might also want to avoid to put all your assets in a single huge pack file since Steam needs to copy & patch the whole file even if only a small subset of it changed. A good start would be to bundle resources of the same type together in pack files smaller than 4GB each.

If you follow these rules you will minimize patch sizes and only new content will need to be downloaded. Your customers will thank you for that and you will be able to increase the quality of your product by shipping more updates.

If you suspect that your game packaging is not interacting well with the SteamPipe update process, please contact your Valve representative and we can look into enabling advanced features to help with this.

创建零售安装光盘

To build retail install disc for SteamPipe games, you must first setup a build project file.
In this example, the SKU file is called "sku_goldmaster.txt":
"sku" { "name" "Test Game Installer" "appid" "202930" "disk_size_mb" "640" "included_depots" { "1" "202931" "2" "202932" } }
Some tips to keep in mind:
  • 创建一个新文件夹,并将零售光盘映像写入其中,例如:“D:\retail_disks”。 仅添加 included_depots 部分中的 depot,排除部分不再存在。
  • 您可以使用 Steam.exe(有 -dev 与 -console 命令行参数)或 steamcmd.exe 生成安装映像。 在这两种情况下,使用“ build_installer”命令。
  • 使用已拥有您要放入零售光盘的游戏和所有 depot 的 Steam 帐户登录。 否则,该帐户不需要特殊权限,任何人都可以创建安装光盘。
  • 如果您使用 Steam.exe,请停止所有其他下载。
  • 前往控制台页面并运行 build_installer 命令:
    build_installer sku_goldmaster.txt "D:\retail_disks"
    由于所有的 depot 都是首次重新下载,因此创建可能需要一段时间。
  • 要使用本地内容服务器创建 GM,请运行:
    @localcontentserver "webserver"
    build_installer sku_goldmaster.txt "D:\retail_disks" local
    因为“零售安装光盘”和本地游戏备份基本相同,因此请参考“备份”。
  • 看到“Backup finished for AppID...”后,说明安装磁盘映像已准备就绪。 您可以在 logs\backup_log.txt 中找到有关备份生成版本的更多详情。
  • 在“D:\retail_disks”中有新文件夹(Disk_1、Disk_2 等),而且像“disk_size_mb”指定的那样,每个文件夹不大于 640 MB。 每个磁盘文件夹都包含了每个 depot 的“sku.sis”文件以及 .csd 和 .csm 文件。 较大的 depot 会跨越多个磁盘。 与本地游戏备份文件不同,所有零售安装磁盘内容始终被加密。 将 SDK GM 的设置文件(setup.exe、setup.ini 等)复制到第一个磁盘上的文件夹中,零售光盘安装程序即可完成。
  • 为 macOS 创建 GM 时,请确保在 Mac 上打开 goldmaster/disk_assets/SteamRetailInstaller.dmg 映像。 然后,将其中的应用复制到您媒体的根中。 我们还建议重命名已安装的应用、为图标加上品牌元素并使窗口仅显示安装程序。
  • 为 macOS 创建多盘 GM 时,请确保每张光盘的卷名都匹配。 卷名是安装路径的一部分,因此,如果名称不匹配,安装程序将无法找到下一张光盘。

(可选)从测试版分支创建零售安装程序

The process above will create a retail installer based on the default branch. If you need to create an installer based on a beta branch, you must first create a beta branch named "baseline". Then use the following command to build from the baseline branch:
build_installer <project file> <target folder> <beta key> <beta pwd> steamcmd ex: build_installer sku_goldmaster.txt "D:\retail_disks" baseline superSecret script ex: steamcmd.exe +login user_name password +build_installer "..\Build\GameDataSku.txt" c:\destination beta_key beta_password +exit

从零售安装程序安装 DLC

In some circumstances, you may wish to create a retail installer that includes your DLC packages. In such cases, the process to create the installer requires only a few changes.
In "sku_goldmaster.txt", include the DLC AppIDs under the "included_depots" section. Once you have run the "build_installer" process, find the generated sku.sis file for the installer and open it with a text editor.
Add the DLC AppID in the "apps" section. For example, if I had a game with AppID 1000 and DLC AppID 1010, I would adjust the "apps" section as follows:
"apps" { "0" "1000" "1" "1010" }
This will ensure that Steam checks for ownership of the DLC and prompt the user for a key if the DLC is not owned by the account that they are logging into on Steam.

在单张光盘/单个安装程序包上为多个 App ID 创建零售安装程序

To build a GM containing multiple Steam Pipe apps. Build each app installer one by one but point them all to the same output folder. Each build will merge itself with the already existing install image.

自定义零售安装磁盘

See Customizing a gold master for more details on customizing your retail install disk.

发行前预先载入游戏

By default, all content is always encrypted, on all retail discs and on all content servers. Switching a game to preload mode means owners can download the content, but it stays encrypted on the users' disk and can't be played. Once the game becomes officially released, Steam will decrypt the preloaded content and the user can play the game.

Switching a game to preload mode is recommended in these cases:
  • 在游戏实际可用之前,将带有产品密钥的零售光盘发货(零日盗版)。
  • 进行了预购且大小超过 20GB 的游戏。

Please submit a ticket to Steam Publishing if you believe your game requires preloading.

创建 DLC

DLC is built as a depot of the base game. See the 可下载内容(DLC) documentation for more information.

SteamPipe 故障排除

通过 steamcmd 登录时显示“Login Failure: Account Logon Denied Failed”

Cause: Probably SteamGuard is preventing login. Resolution:
  • 检查与您尝试登录时使用的帐户关联的电子邮件,并查看是否有来自 Steam 客服的电子邮件。 复制该电子邮件中的代码。
  • 运行以下 steamcmd:set_steam_guard_code <code>
  • 重新尝试从 steamcmd 登录:Steam>logon <buildaccount> <password>

下载问题一般故障排除

  • 重启计算机、调制解调器、路由器等。
  • 验证防火墙设置。 新系统需要此处列出的 80 端口(HTTP)以及所有其他 Steam 端口。
  • 暂时禁用本地杀毒或垃圾邮件拦截程序。
  • 设置->下载中检查 Steam 下载地区。 它应该与您所在位置一致。
  • 停止下载、卸载并重新安装游戏(清除清单缓存)。
  • 退出 Steam,并删除 Steam 安装文件夹中的两个文件夹 appcache 和 depotcache。
  • 尝试将您的 Steam 下载地区设置到较远的其他位置。 如果您附近的内容服务器在提供错误的数据,这可能会起作用。

我的 Mac 和/或 Linux 生成版本未安装任何文件。 为什么?

If you're testing via Steam the installation of your game or application across multiple platforms, you may run into a situation where the build deploys on Windows but doesn't deploy any files on Mac or Linux despite your SteamPipe process being setup to upload Mac and/or Linux depots. There is a step that is easily missed which involves adding your alternate Depots to the Package being deployed. You can check what depots are included in a package via the following steps:
  1. 导航至您的应用管理员页面。
  2. 在“查看关联项目”栏目,点击“所有关联程序包、DLC、试用版及工具 ”。
  3. 点击您试图下载的程序包的标题。
  4. 查看已包含 Depot栏目。
  5. 使用添加/移除 Depot以确保分配到该程序包的 Depot 集正确。
There are a number of discussion threads about this that may also assist:

steamcmd.exe 运行时,出现以下错误:“SteamUpdater: Error: Steam needs to be online to update。 Please confirm your network connection and try again.”(Steam 需要在线进行更新。请确认您的网络连接正常,然后重试。)

Resolution: Go to Internet Options->Connections->Lan Settings and check Automatically detect settings.

运行应用生成版本会导致以下错误:“ERROR! Failed 'DepotBuild for scriptname.vdf' - status = 6.”(错误!DepotBuild for scriptname.vdf 失败。- 状态 = 6。)

Possible Causes:
  • 帐户没有该应用的权限。
    • 在 app_build.vdf 中检查 app ID 是否正确。
    • 检查生成版本帐户是否拥有该 app ID 的适当权限
  • Steamcmd 找不到 depot 内容。
    • 检查 app_build 脚本中的值“contentroot”是相对于脚本文件位置的有效路径。
    • 检查 depot_build 脚本中的值“LocalPath”是相对于 app_build 文件位置的有效路径。 检查该路径是否包含实际内容。

运行应用生成版本会导致以下错误:“ERROR! Failed to get application info for app NNNNN (check login and subscription)”(错误!获取应用 NNNNN 的应用程序信息(检查登录和订阅)失败)

This means that Steam can't retrieve information about the app, either because it doesn't exist or the user doesn't have access to the app.
  • 检查 NNNNN 是否为您分配到的该应用的 app ID。
  • 在 app_build.vdf 中检查 app ID 是否正确。
  • 对于全新的 app ID,请检查 Steamworks 中的应用管理员配置是否已发布。 新应用应在配置选项卡中具有 Steam Pipe 安装目录,在 depot 选项卡中具有 depot,并且所有更改都已在发布选项卡上发布。
  • 如果一切看起来都正确,请确保您的帐户已拥有该 app ID。

在启动时出现:“An error occurred while installing [AppName] (Invalid content configuration)”(安装 [AppName] 时发生错误(无效的内容配置))

Possible Causes:

启动时显示“Error code 15”(错误代码 15)

This is the CEG servers rejecting the request to CEG the exe. Check the release state on the game page. If it is not 'playable', you will need to request Steam keys that override the release state.

“The Steam Servers are too busy to handle your request... Error Code (2)”(Steam 服务器过于繁忙,无法处理您的请求…错误代码(2))于启动时显示

This is the CEG servers failing to find a matching CEG exe. Double check that you have a working CEG executable on the CEG tab of your app admin. Click the 'status' button to make sure that it's propped.

我不记得 steamcmd 命令是什么或它是如何运作的

Use the 'find' command in steamcmd to search for any steamcmd command. It will do partial matching on the command name and it will list out the command syntax.
Steam>find build_installer ConVars: Commands: build_installer : <project file> <target folder> <beta key> <beta pwd>