CustomInstallActions
CustomInstallActions 元素包含所有关于要运行哪些自定义安装操作以及何时运行的定义。你在 MicrosoftGame.config 文件中只能声明一个此元素实例。它有一个必需的子元素 Folder,它是一个字符串,指定包含所有自定义操作所需文件的文件夹。此文件夹可以包含子文件夹。你需要负责确保包中包含任何自定义操作可执行文件所需的依赖项,并且这些依赖项位于每个可执行文件的适当加载路径中。当你打包游戏时,
makepkg 会将此 CustomInstallActions 元素转换为生成的 appxmanifest.xml 中的 MSIX windows.customInstall 扩展,其中对应的元素是 <CustomInstall>,并将 Folder 表达为 属性(attribute)。你自己不需要编写那种 <CustomInstall> 形式 —— 在 MicrosoftGame.config 中,Folder 是 CustomInstallActions 的一个子 元素(element),如本文后面的 游戏配置文件更改 示例所示。你不得将任何主游戏可执行文件或其他文件放入指定的 Folder 中。它明确仅用于自定义安装文件。
操作类型
自定义安装扩展的三个子节点规定了某些自定义操作何时运行。共有三种类型的自定义安装操作。- Install action: 平台在应用首次启动 之前 运行的操作
- Repair action: 当用户选择“修复(Repair)”或“重置(Reset)”时运行的操作
- Uninstall action: 当用户卸载应用时运行的操作
尽管名称如此,install 操作并不在安装包时运行。每种操作类型都在应用生命周期的特定时刻运行,而 InstallAction 只运行一次,在游戏 首次启动之前 立即运行(这是平台可以出示所需 UAC 提示的最早时刻)。“Install”、“Repair”和“Uninstall”命名的是操作所属的生命周期 类别,而不是它运行的时刻。如果你需要在真正的包安装/下载时刻执行工作,自定义安装操作并不是相应的机制。有关完整流程,请参见 自定义操作的用法。
只有在已运行过 Install 或 Repair 操作时,Uninstall 操作才会被执行。系统使用 Name 属性来跟踪此状态。因此,Install/Repair/Uninstall 操作使用相同的 Name 非常重要。
操作的组成
File
对于每个操作,你必须指定要运行的文件,并且该文件必须位于你的包内。如果你指定了路径,它将隐式地相对于 CustomInstallActions 的 Folder 路径。你不能指定绝对路径。你的路径不能以反斜杠(\)开头。Name
你必须为操作指定一个 Name。此 Name 在父 Actions 节点内必须唯一,但可以在不同的 Actions 节点之间共享。例如,你可以同时将 File=“MySetup.exe” 和 Name=“abc123” 指定为 InstallAction 和 RepairAction。另一方面,如果你有两个 InstallAction 元素,它们必须使用不同的 Name。只要可执行文件本身没有变化,你就应在各版本包中为同一个可执行文件使用相同的 Name。Name 用作操作的身份标识,允许平台跟踪哪些操作已成功运行,以及在更新包中是否需要重新运行。如果更新包指定了一个自定义操作,而其 Name 已经成功运行过,则平台在更新时会跳过此操作。参数列表的不同不构成身份的不同。如果你想在 更新 的包中使用不同参数运行同一个可执行文件,必须提供不同的 Name。你负责合理配置声明的 Names,并在版本之间进行跟踪。
Arguments
每个自定义安装操作还有第三个元素 argument,允许你包含运行可再发行命令所需的任何参数。自定义操作的用法
安装反作弊软件通常要求用户具有管理员权限。总的来说 —— 因为自定义操作是一项非常强大的功能 —— 平台对任何包含自定义操作的包都要求管理员权限。对于以管理员权限运行的操作,Windows 要求在应用首次运行时显示用户账户控制(UAC)提示。用户工作流程如下。- 游戏的 Microsoft Store 页面会包含关于要求的说明,包括安装是否需要提升权限、安装是否会运行自定义操作,以及这可能对用户意味着什么。提供这些信息是为了让用户可以就购买游戏做出知情决定。
- 假设用户接受这些限制和影响,他们选择“安装”。
- 平台会检测到该包包含自定义操作,并记录需要运行自定义操作这一事实。但它不会在初始安装阶段运行自定义操作,而是在用户首次启动游戏时运行任何自定义操作。
- 游戏首次启动时,当平台即将运行自定义操作时,它会显示 UAC 提示。用户随后需要提供管理员凭据并接受提升权限。即使一个包中包含多个自定义操作,用户也只会看到一个 UAC 提示。除非有一个或多个自定义操作已更改,否则更新时不会再有 UAC 提示。卸载游戏时会出现 UAC 提示。
自定义安装操作仅在主 MSIXVC 包内受支持。它们在框架包、可选包、修改包或任何其他类型的包中都不受支持。
自定义 install、repair 和 uninstall 操作由零售 Microsoft Store 部署管道执行。当你在本地安装该包用于开发时(例如,使用
wdApp install 安装一个松散的 .msixvc,或使用 Add-AppxPackage 注册包),它们不会运行。本地开发安装仍可让你验证包是否正确地 声明 了这些操作(它们会作为 windows.customInstall 扩展出现在生成的 appxmanifest.xml 中),但自定义操作的可执行文件本身不会在这条路径上被调用。要端到端地验证操作运行,请通过 Store 或沙箱流程安装游戏。