- MSIX
- Overview
- (略)
- What is MSIX?
-
Key features
- 安装成功率99.96%?
- 优化传输带宽
- 共享重复的文件
-
Highlights
- 使用MSIX Packaging Tool可以从已有的Windows应用创建MSIX料包
- 使用App Installer来安装或升级任意的MSIX应用料包,可从本地或者从网络安装
- 通过开源Package Support Framework动态提供修复,可以在不访问源码的情况下来将应用运行在MSIX容器中
- 通过开源的MSIX SDK,可以在多平台使用MSIX
-
Introduction video to MSIX and resources
- 提供了一个视频
-
Inside an MSIX package
- Footprint Files
- AppManifest.xml
- 包含系统需要部署、显示、以及更新一个MSIX应用的信息
- 料包标识
- 料包依赖
- 所需的能力
- 可视元素
- 扩展点
- 包含系统需要部署、显示、以及更新一个MSIX应用的信息
- AppBlockmap.xml
- 列出所有应用文件,及其索引和保密级哈希
- 这个文件会被签名
- AppSignature
- 文件被签名的时候生成的。
- CodeIntegrity
- AppManifest.xml
- Package payload
- 应用文件
- Footprint Files
-
Benefits of app containers
- MSIX料包中的应用运行在一个轻量级的应用容器中。
- 具有文件系统隔离、以及注册表虚拟化
- 所有的MSIX应用可以读取全局注册表,但是只能写入自己的注册表以及数据目录
- 如应用被卸载或者重置的话,数据将会被删除
- 某应用的虚拟注册表或者文件系统无法被其他应用访问
- MSIX料包中的应用运行在一个轻量级的应用容器中。
-
- Features and supported platforms
- 在以下版本的Windows中支持
- Windows 10, version 1709, and later.
- 1709之前的,需要采用MSIX Core来支持
- ……
- Windows 10, version 1709, and later.
-
MSIX feature support(过)
-
Package format support
- 从1809开始罗列
-
Microsoft Store
- 也是从1809开始罗列
-
Microsoft Store submissions
- 最低的版本是通过MinVersion的TargetDeviceFamily指定的
- 比如:
MinVersion="10.0.17701.0"
- 比如:
- 最低的版本是通过MinVersion的TargetDeviceFamily指定的
-
Non-Windows Platform
- 可以使用MSIX SDK
- 在以下版本的Windows中支持
- MSIX Container
- 简单地说,把之前UWP那一套搬过来了。
- Understanding how MSIX packages run on Windows
- (暂略)
- Flexible virtualization
-
Overview
- 应用可以让某些文件或注册表项给其他应用。
- 这些可以在app卸载之后依然有效
- 那些其他应用不可见的注册表现和文件会被删除
-
How to control the virtualization of selected locations
- Win 10 21H1引入的行为
- 可以选择一些目录不虚拟化
- 只能选
%USERPROFILE%\AppData
之内的一个地方 - 只能选HKCU内的一个表项
- 文中给出了一个配置例子
- 只能选
-
Mechanisms prior to Windows 10, version 21H1
- UWP中是全虚拟化的,没有缺口
- 本章介绍一些MSIX中引入的缺口
-
- MSIX package signing
- Overview
- 每个MSIX料包都要用有效证书签名
- 签名的证书必须是系统中认可的CA颁发的
- 对于MSIX绑袋,不需要签名绑袋中的所有料包,只需签名料包自身即可
-
Timestamping
- 推荐签名的时候设置时间戳
- 作为依据,可以在证书过期之后来判断签名时间
-
Package Integrity Enforcement
- 签名还可以用来保证料包的完整性
- 完整性在安装、运行、以及Windows Defender检测的时候得到保证
- 如果不是MS Store安装的,料包的完整性需要通过声明 uap10:PackageIntegrity来强制(文中有XML示例)
-
Device mode
- 在设置App中可以选择设备运行App的模式
- Microsoft Store apps,最安全的模式
- Sideload apps以及Developer mode,最宽泛
- 仅在开发App的时候选择Developer mode
- Win 10 2004中Sideload默认开启
- 在设置App中可以选择设备运行App的模式
- 每个MSIX料包都要用有效证书签名
- Sign an app package using SignTool
- SignTool是一个命令行工具,可以用于给msix签名
-
Prerequisites
- 一个打包了的应用(可用MakeAppx打包)
- 一个有效的签名用证书
- SignTool.exe
C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x64|x86\SignTool.exe
-
Using SignTool
- 证书要么以文件形式存在,要么可以从证书存储中获得
-
Determine the hash algorithm
- MakeAppx.exe默认使用SHA256
- SignTool默认的哈希算法是SHA1
-
Sign the app package
- 示例:使用证书存储中的采用SHA256的证书做签名
SignTool sign /fd SHA256 /sha1 证书指纹 <File Path>.msix
- 示例:使用证书存储中的采用SHA256的证书做签名
- Sign an MSIX package with Device Guard signing
- Microsoft Store for Business and Microsoft Store for Education会在23Q1退役
- (剩余略)
- Known issues and troubleshooting
- 0x8008开头的错误码意味着要重新建构料包之后再运行SignTool
- 可以开启SignTool的
/debug
工具 - 0x8007000B错误的具体信息可以从事件录记中查看
-
Frequently asked questions (FAQ)
- Q1:PE文件的可签名大小限制是4GB
- Q2:所有Windows都一致
- Q3:跟SignTool是否64位32位无关
- ……
- Unsigned MSIX for testing
- Win 11开始,开发者可以通过Powershell安装未签名的料包,只服务于测试的目的
-
How to create an unsigned package
- 未签名的料包必须包含一个特殊的OID(组织ID),加在manifest文件的Identity元素中。
- 未签名的料包不会与签名了的有相同的表示
- 未签名的料包必须包含一个特殊的OID(组织ID),加在manifest文件的Identity元素中。
-
Installing an unsigned package
- PowerShell必须以管理员权限运行,才能安装未签名的料包
- 执行Add-AppxPackage时必须传入
-AllowUnsigned
杆标 - 非管理员只能安装不带可执行文件的未签名料包
- 例子:
Add-AppPackage -Path ".\MyEmployees.appx" -AllowUnsigned
- 准备发布前,必须签名并一处特殊的OID
- 执行Add-AppxPackage时必须传入
- PowerShell必须以管理员权限运行,才能安装未签名的料包
- Overview
- App package formats
- Overview
- 有一些特定的MSIX料包格式
-
Optional packages
-
App streaming install
-
Flat bundle packages
-
Asset packages
-
Resource packages
-
MSIX Bundles
-
App extensions
-
App Services
-
Modification packages
- App package architectures
- 配置成支持特殊处理器框架(x86、x64、ARM、ARM64)
-
Windows 10 devices and architectures(略)
- MSIX resources
- MSIX Tech Community
- MSIX Toolkit
- MSIX SDK
- MSIX Labs
- Overview
- Overview
- Create an MSIX package from an existing installer
- Tasks for after you create an MSIX package
- Bundle MSIX packages
-
Step 1: Find MakeAppx.exe (略)
-
Step 2: Bundle the packages
- 示例:
C:\> "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\MakeAppx.exe" bundle /d c:\AppPackages\ /p c:\MyLOBApp_10.0.0.0_ph32m9x8skttmg.msixbundle
- 要义是
c:\AppPackages\
内必须只有同源的msix封包
- 示例:
-
Step 3: Sign the bundle (略)
-
- Bundle MSIX packages
- Tasks for after you create an MSIX package
- Build an MSIX package from source code
- Overview
- (过)
- Package from the command line
- Overview
- (略)
- Generating package artifacts
- (过)
- Create an MSIX package with the MakeAppx.exe tool
- MakeAppx.exe可以用于创建.msix、.appx、.msixbundle、.appxbundle
- 包含在Windows 10 SDK中
- 也可以从安装包中提取文件
-
Using MakeAppx.exe
- 处于
C:\Program Files (x86)\Windows Kits\10\bin\<build number>\<architecture>\makeappx.exe
-
MakeAppx.exe syntax and options
- (过)
-
Create an app package
- (过)
-
Create an app bundle
-
Extract files from a package or bundle
- 处于
- MakeAppx.exe可以用于创建.msix、.appx、.msixbundle、.appxbundle
- Overview
- Overview
其他
故障排除
- 如果store certification失败,告知“product identifies itself as a test procduct”之类的,
- 可能是因为Publisher没有设置成跟store账户一致。
(底部)