Skip to content

打包(Windows)

本指南让你的应用为 Microsoft Store 做好准备, 它会列出你的应用、为用户安装它,并分发你发布的每一次更新。 Store 只接受一种格式的桌面应用,即 MSIX: 一个包含你的可执行文件、其资源,以及向 Windows 描述该应用的清单的归档包。

安装 Windows SDK。 它附带 makeappx(用于构建包)和 makepri(用于构建包所需的资源索引)。

包根目录下的 AppxManifest.xml 描述了该包。 这是 Slint 应用所需的最小清单:

<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap10 rescap"
>
<Identity
Name="YourOrganization.YourApp"
Publisher="CN=YourOrganization"
Version="1.0.0.0"
ProcessorArchitecture="x64"
/>
<Properties>
<DisplayName>Your App</DisplayName>
<PublisherDisplayName>Your Organization</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26100.0" />
</Dependencies>
<Resources>
<Resource Language="en-us" />
</Resources>
<Applications>
<Application
Id="YourApp"
Executable="your-app.exe"
uap10:TrustLevel="mediumIL"
EntryPoint="Windows.FullTrustApplication"
>
<uap:VisualElements
DisplayName="Your App"
Description="What your app does"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png"
/>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>
xml

打包的应用默认运行在应用容器中,处于沙箱内, 拥有自己的存储和全部能力。 相比之下,完全信任(full trust)应用以用户级别运行,与未打包的应用拥有相同的访问权限。

Slint 应用需要完全信任,以便访问用户选择的文件、访问 GPU 进行渲染, 以及调用 Win32 API。

在你的清单中,声明完全信任需要以下三个部分:

  • EntryPoint="Windows.FullTrustApplication" 将应用标记为普通的可执行文件。
  • uap10:TrustLevel="mediumIL" 以用户身份运行进程。
  • runFullTrust 是所需的能力。

清单中的每个路径都是包内的相对路径。

用 MSVC 工具链构建的二进制文件会动态链接 C 运行时, 而 Skia 渲染器还会额外用到 C++ 标准库。 两者都随 Visual C++ redistributable 一起提供。 如果你使用的是全新的 Windows 安装,请确保已安装 Visual C++ 运行时。

声明对携带这些库的 framework 包(框架包)的依赖, Windows 就会随你的应用一起安装运行时:

<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.26100.0" />
<PackageDependency
Name="Microsoft.VCLibs.140.00.UWPDesktop"
MinVersion="14.0.30704.0"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
/>
</Dependencies>
xml

创建一个包含你的包所需内容的目录,然后打包它:

Terminal window
# layout/
# AppxManifest.xml
# your-app.exe
# Assets/...
makeappx pack /d layout /p YourApp_1.0.0.0_x64.msix /o
powershell

这完成了单个架构的构建。 结果是未签名的(这是 Store 所要求的),此时还无法安装。

Windows on Arm 通过仿真运行 x64 二进制文件。 原生 arm64 构建更快,且几乎不费什么力气。 为每个架构构建可执行文件, 在每个清单中相应地设置 ProcessorArchitecture,为每个架构组装一个 layout, 各自打包,然后合并它们:

Terminal window
makeappx bundle /d slices /p YourApp_1.0.0.0_arm64_x64.msixbundle /bv 1.0.0.0 /o
powershell

除了 ProcessorArchitecture 之外,各个 slice 之间的所有内容都必须相同; 我们建议从一个模板生成每个清单。

清单为每个 logo 指定一个文件,Windows 会根据所需大小和上下文在该文件的变体中进行选择。

要生成图标的各个变体,请按以下步骤操作:

  1. 按 Windows 使用的每种大小渲染小图标:16、24、32、48 和 256。 用 targetsize 限定符为每个文件命名。

  2. 为每种大小添加一个 unplated 变体。 这些变体在透明背景上只保留标记本身,Windows 绘制它们时不带底板: 在深色任务栏上使用 altform-unplated, 在浅色任务栏上使用 altform-lightunplated。

Assets/Square44x44Logo.png # named in the manifest
Assets/Square44x44Logo.targetsize-48.png
Assets/Square44x44Logo.targetsize-48_altform-unplated.png # dark backgrounds
Assets/Square44x44Logo.targetsize-48_altform-lightunplated.png # light backgrounds
plaintext

这些后缀是资源限定符: . 将文件名与第一个限定符分隔开,_ 分隔后续的限定符。

  1. 构建资源索引,正是它来解析这些限定符。
Terminal window
makepri createconfig /cf priconfig.xml /dq en-US /o
makepri new /pr layout /cf priconfig.xml /of resources.pri /o
Copy-Item resources.pri layout\resources.pri
powershell

把 priconfig.xml 放在 layout 之外,否则它会被编入索引并和其他所有内容一起打包。

Store 会使用 Microsoft 证书为你的包重新签名, 因此请把面向 Store 的包保持为未签名。 在那里发布不需要代码签名证书。

对于 Store 之外的分发,Windows 不会安装它不信任的包, 而且证书的主题必须与清单中的 Identity/Publisher 完全匹配。 更多信息请参见使用 SignTool 对包签名。

开发期间你不需要证书。 启用开发者模式后, Windows 可以直接从目录注册包:

Terminal window
Add-AppxPackage -Register layout\AppxManifest.xml
powershell

应用会出现在 Start 菜单中,并以它真实的包标识运行。 这对测试很重要:诸如 C++ 运行时之类的 framework 依赖项,只有在应用通过其标识启动时才会进入 DLL 搜索路径。 用以下命令再次移除它:

Terminal window
Get-AppxPackage YourOrganization.YourApp | Remove-AppxPackage
powershell

© 2026 SixtyFPS GmbH