打包(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>打包的应用默认运行在应用容器中,处于沙箱内, 拥有自己的存储和全部能力。 相比之下,完全信任(full trust)应用以用户级别运行,与未打包的应用拥有相同的访问权限。
Slint 应用需要完全信任,以便访问用户选择的文件、访问 GPU 进行渲染, 以及调用 Win32 API。
在你的清单中,声明完全信任需要以下三个部分:
EntryPoint="Windows.FullTrustApplication"将应用标记为普通的可执行文件。uap10:TrustLevel="mediumIL"以用户身份运行进程。runFullTrust是所需的能力。
清单中的每个路径都是包内的相对路径。
Visual C++ 运行时
Section titled “Visual C++ 运行时”用 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>创建一个包含你的包所需内容的目录,然后打包它:
# layout/# AppxManifest.xml# your-app.exe# Assets/...
makeappx pack /d layout /p YourApp_1.0.0.0_x64.msix /o这完成了单个架构的构建。 结果是未签名的(这是 Store 所要求的),此时还无法安装。
同时支持 x64 和 arm64
Section titled “同时支持 x64 和 arm64”Windows on Arm 通过仿真运行 x64 二进制文件。
原生 arm64 构建更快,且几乎不费什么力气。
为每个架构构建可执行文件,
在每个清单中相应地设置 ProcessorArchitecture,为每个架构组装一个 layout,
各自打包,然后合并它们:
makeappx bundle /d slices /p YourApp_1.0.0.0_arm64_x64.msixbundle /bv 1.0.0.0 /o除了 ProcessorArchitecture 之外,各个 slice 之间的所有内容都必须相同;
我们建议从一个模板生成每个清单。
清单为每个 logo 指定一个文件,Windows 会根据所需大小和上下文在该文件的变体中进行选择。
要生成图标的各个变体,请按以下步骤操作:
-
按 Windows 使用的每种大小渲染小图标:16、24、32、48 和 256。 用
targetsize限定符为每个文件命名。 -
为每种大小添加一个 unplated 变体。 这些变体在透明背景上只保留标记本身,Windows 绘制它们时不带底板: 在深色任务栏上使用
altform-unplated, 在浅色任务栏上使用altform-lightunplated。
Assets/Square44x44Logo.png # named in the manifestAssets/Square44x44Logo.targetsize-48.pngAssets/Square44x44Logo.targetsize-48_altform-unplated.png # dark backgroundsAssets/Square44x44Logo.targetsize-48_altform-lightunplated.png # light backgrounds这些后缀是资源限定符:
. 将文件名与第一个限定符分隔开,_ 分隔后续的限定符。
- 构建资源索引,正是它来解析这些限定符。
makepri createconfig /cf priconfig.xml /dq en-US /omakepri new /pr layout /cf priconfig.xml /of resources.pri /oCopy-Item resources.pri layout\resources.pri把 priconfig.xml 放在 layout 之外,否则它会被编入索引并和其他所有内容一起打包。
Store 会使用 Microsoft 证书为你的包重新签名, 因此请把面向 Store 的包保持为未签名。 在那里发布不需要代码签名证书。
对于 Store 之外的分发,Windows 不会安装它不信任的包,
而且证书的主题必须与清单中的 Identity/Publisher 完全匹配。
更多信息请参见使用 SignTool 对包签名。
开发期间你不需要证书。 启用开发者模式后, Windows 可以直接从目录注册包:
Add-AppxPackage -Register layout\AppxManifest.xml应用会出现在 Start 菜单中,并以它真实的包标识运行。
这对测试很重要:诸如 C++ 运行时之类的 framework 依赖项,只有在应用通过其标识启动时才会进入 DLL 搜索路径。
用以下命令再次移除它:
Get-AppxPackage YourOrganization.YourApp | Remove-AppxPackage© 2026 SixtyFPS GmbH