• 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应用的信息
              • 料包标识
              • 料包依赖
              • 所需的能力
              • 可视元素
              • 扩展点
          • AppBlockmap.xml
            • 列出所有应用文件,及其索引和保密级哈希
            • 这个文件会被签名
          • AppSignature
            • 文件被签名的时候生成的。
          • CodeIntegrity
        • Package payload
          • 应用文件
      • Benefits of app containers

        • MSIX料包中的应用运行在一个轻量级的应用容器中。
          • 具有文件系统隔离、以及注册表虚拟化
          • 所有的MSIX应用可以读取全局注册表,但是只能写入自己的注册表以及数据目录
          • 如应用被卸载或者重置的话,数据将会被删除
          • 某应用的虚拟注册表或者文件系统无法被其他应用访问
    • Features and supported platforms
      • 在以下版本的Windows中支持
        • Windows 10, version 1709, and later.
          • 1709之前的,需要采用MSIX Core来支持
        • ……
      • MSIX feature support(过)

      • Package format support

        • 从1809开始罗列
      • Microsoft Store

        • 也是从1809开始罗列
        • Microsoft Store submissions

          • 最低的版本是通过MinVersion的TargetDeviceFamily指定的
            • 比如:MinVersion="10.0.17701.0"
        • Non-Windows Platform

          • 可以使用MSIX SDK
    • 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默认开启
      • 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
      • 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元素中。
            • 未签名的料包不会与签名了的有相同的表示
        • Installing an unsigned package

          • PowerShell必须以管理员权限运行,才能安装未签名的料包
            • 执行Add-AppxPackage时必须传入-AllowUnsigned杆标
            • 非管理员只能安装不带可执行文件的未签名料包
            • 例子:Add-AppPackage -Path ".\MyEmployees.appx" -AllowUnsigned
            • 准备发布前,必须签名并一处特殊的OID
    • 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
  • 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 (略)

  • 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

其他

故障排除

  • 如果store certification失败,告知“product identifies itself as a test procduct”之类的,
    • 可能是因为Publisher没有设置成跟store账户一致。

(底部)