本指南将指导你将现有的命令行可执行文件打包为 MSIX 包,以便通过 Windows 程序包管理器(winget)、Microsoft 应用商店或直接分发进行分发。
先决条件
- 要打包的现有 CLI 可执行文件 (
.exe) - Windows 10版本 1809 或更高版本
步骤
1. 组织您的命令行界面应用程序
将 CLI 可执行文件和任何依赖项放在专用文件夹中。 此文件夹将包含应在 MSIX 包中包含的所有文件。
mkdir MyCliPackage
cd MyCliPackage
# Copy your CLI executable and dependencies here
2.安装 winapp CLI
通过Windows 程序包管理器安装 winapp CLI,或者更新到最新版本(如果已安装):
# Install (or update if already installed)
winget install microsoft.winappcli --source winget
3. 生成 Package.appxmanifest 文件
为 CLI 可执行文件生成基本 Package.appxmanifest 和所需资产:
winapp manifest generate --executable .\yourcli.exe
此命令在当前目录中创建一个 Package.appxmanifest 文件,其中包含从可执行文件填充的默认值。
4. 配置清单
编辑生成的 Package.appxmanifest 以自定义您的包。 下面的每个子步骤都说明了要更改的内容和原因。
4.1 添加所需的命名空间
如果元素尚不存在,请将 uap5 命名空间添加到 Package 元素。 在步骤 4.3 中,执行别名需要这一操作:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
...
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap uap5 rescap">
4.2 配置 Application 元素
在元素中 <uap:VisualElements> ,添加 AppListEntry="none" 以隐藏“开始”菜单中的应用。 CLI 工具从终端调用,因此不需要“开始”菜单条目:
<uap:VisualElements
DisplayName="YourApp"
Description="My Application"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png"
AppListEntry="none">
</uap:VisualElements>
4.3 添加执行别名扩展
添加执行别名,以便用户可以从任何终端窗口按名称运行 CLI。 在 <Application> 元素中添加此项(之后 <uap:VisualElements>):
<Extensions>
<uap5:Extension Category="windows.appExecutionAlias">
<uap5:AppExecutionAlias>
<uap5:ExecutionAlias Alias="yourcli.exe" />
</uap5:AppExecutionAlias>
</uap5:Extension>
</Extensions>
将 yourcli.exe 替换为您 CLI 所需的命令名称。 用户安装 MSIX 后,他们将能够使用此命令调用 CLI。
4.4 更新应用程序元数据
更新以下字段以匹配 CLI 应用程序。
重要
清单中的 Publisher 值必须与签名证书中的发布者匹配。 如果稍后生成证书(步骤 5),它将使用清单中的发布者。 如果在生成证书后更改发布者,则需要重新生成证书才能匹配。
Identity:更新
Name、Publisher和Version<Identity Name="YourCompany.YourCLI" Publisher="CN=Your Company" Version="1.0.0.0" />属性:更新显示名称、发布者显示名称和说明
<Properties> <DisplayName>Your CLI Tool</DisplayName> <PublisherDisplayName>Your Company</PublisherDisplayName> <Description>Description of your CLI tool</Description> <Logo>Assets\StoreLogo.png</Logo> </Properties>VisualElements:更新显示名称和资源引用
<uap:VisualElements DisplayName="Your CLI Tool" Description="Description of your CLI tool" BackgroundColor="transparent" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png"> <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" /> <uap:SplashScreen Image="Assets\SplashScreen.png" /> </uap:VisualElements>
注意:还应将适当的图标资产添加到包目录中的文件夹 Assets 。 虽然应用不会显示在“开始”菜单中,但应用商店提交仍需要图标,并可能出现在其他上下文中。
5. (可选) 生成开发证书
对于Microsoft Store外部的本地测试和分发,需要使用证书对 MSIX 包进行签名。
生成开发证书。 将其保留在 CLI 文件夹之外,以避免意外将其包含在包中:
# Navigate to a location outside your CLI folder (e.g., your home directory)
cd ~
winapp cert generate
这会在主目录中创建一个 devcert.pfx 文件(例如, C:\Users\yourname\devcert.pfx)。
若要信任开发计算机上的此证书,请安装它(需要管理员权限):
# Run PowerShell as Administrator
winapp cert install ~\devcert.pfx
6. 打包您的CLI
现在,你已准备好创建 MSIX 包:
# Navigate back outside of your project folder
# Package with dev certificate (for local testing/distribution)
winapp pack .\path\to\MyCliPackage --cert .\path\to\devcert.pfx
这会在当前目录中创建一个 .msix 文件。
7.安装和验证
安装 MSIX 包以验证一切是否正常工作:
Add-AppxPackage .\MyCliPackage.msix
如果在步骤 4.3 中添加了执行别名,现在可以从任何终端运行 CLI:
yourcli --help
若要稍后卸载:
Get-AppxPackage *YourCLI* | Remove-AppxPackage
提示
- 准备好分发后,可以使用证书颁发机构的代码签名证书对 MSIX 进行签名,以便用户无需安装自签名证书
- Microsoft Store将为你签名 MSIX,无需在提交之前进行签名。
- 可能需要创建多个 MSIX 包,一个用于支持的每个体系结构(x64,Arm64)
后续步骤
- 通过 winget 分发:将 MSIX 提交到 Windows 程序包管理器 社区存储库
-
发布到 Microsoft Store:使用
winapp store提交包 - 设置 CI/CD:使用 GitHub Action 在流水线中自动打包