Marvin's Blog【程式人生】

Ability will never catch up with the demand for it

25 Jun 2021

Project Reunion文档阅读笔记【二】

Project Reunion

Runtime architecture and deployment scenarios for Project Reunion

关键术语

  • Project Reunion runtime,使用Project Reunion所需的所有的MSIX包,其内容包括Framework, Main以及DDLM
  • Framework package,包括运行时的二进制。含有一个自发动组件可以让APP获得最新版本的Project Reunion。
  • Main package,包含后台任务,服务,应用扩展以及其他没有涵盖在Framework包中的组件。这些通常都是为了提供进程外的服务的代理支持,比如推送通知以及剪贴板。
  • Dynmaic Dependency Lifttime Manager (DDLM),当非打包应用处于使用中时,阻止操作系统对MSIX包进行服务升级。
  • Bootstrapper,应用局部的二进制,供非打包的应用来定位以及加载与之匹配的最佳的Project Reunion版本。此自发动组件是可再发行的组件形式提供的,名叫Microsoft.ProjectReunion.Bootstrap.dll。
  • Provisioning,在系统级别安装并注册软件包的过程(包括拷贝文件以及修改注册表)从而避免每个用户的重复安装。这个过程可以被OS执行,或者在应用安装的时候执行。
  • Installer,应用安装技术,比如MSI,AppInstaller,或者.exe安装
  • MSIX,现代安装技术,让用户可以安全方便从Store或者网站安装应用。对于企业或者共享PC,应用可以通过PowerShell以及MDM安装给所有用户。

Framework packages for packaged and unpackaged apps

使用Project Reunion的应用会引用到框架包提供的运行时组件。框架包允许打包的应用访问用户设备上的单一共享组件源。框架包还囊括了一些其他资源,比如DLL和API定义(包括COM以及WinRT)。这些个资源运行在应用的上下文,所以继承了应用的能力和权限,所以不用自己指定能力和权限。

框架包是以MSIX包的形式在Microsoft Store发行。可以不断更新和升级。使用Project Reunion的应用包会依赖到框架包。

新版框架包发布后,所有APP的依赖会自动升级到这个新版本,不需要额外修改。每次Windows的升级也会升级自带的框架包。应用退出重新加载后会引用最新的包。旧的框架包不会从系统中移除,除非再也不被使用了。

框架包的版本命名遵从Semantic Versioning 2.0.0 ,简单说只有主版本升级的时候才需要考虑兼容性。

Additional requirements for unpackaged apps

不打包的应用必须使用dynamic dependencies API 才得以使用Project Reunion的特性诸如:WinUI,App lifecycle, MRT Core以及DWriteCore。这些特性使不打包的App可以动态生成到框架包或者其他MSIX包的依赖关系。这使得不打包的应用可以保持它们既有的部署机制,比如使用MSI或者其他安装器。

虽然动态依赖主要是给不打包的应用使用的,打包的应用也可以使用。

三个组件可以做动态依赖:自启动器,DDLM,以及MAIN。

Bootstrapper

自启动器是一个程序库,必须包含在主程序中。它提供以下功能:

  • 为框架包初始化DDLM
  • 找到并加载框架包

对于不打包的应用,必须在程序执行早期调用自启动器代码。

Dynamic Dependency Lifetime Manager (DDLM)

DDLM的作用是防止框架包在被不打包应用使用的时候被升级。

每个版本和体系架构的框架包都有一个DDLM。

Main package

提供一个短暂运行的服务进程用来跟踪已添加的动态依赖。如果依赖由Project Reunion管理则不需要此软件包。

Deployment scenarios

Project Reunion MSIX packages are already installed on the computer

如果Framework, Main, DDLM这些MSIX包已经安装到计算机上了,则不需要额外操作。MSIX包是安装到系统范围,所以硬盘上只有一份。应用发现目标软件包已有的情况下,不做任何操作。

Project Reunion Runtime is not installed on the computer

通过安装Project Reunion来安装Framework, Main, DDLM等包。

Project Reunion Runtime needs to be provisioned system-wide

需要升级到管理员权限。如果获取管理员权限不成功,则会安装到用户级别。

企业环境下,IT管理员可以为用户部署系统级别的安装。

一些相关话题。

Deploy packaged apps that use Project Reunion

Overview

每次使用Project Reunion的WinUI项目模板创建项目的时候,会在项目中包含一个专门用来编MSIX包的Windows Application Packaging ProjectPackage a desktop or UWP app in Visual Studio 提供更多信息。Manage your MSIX deployment 提供了关于部署MSIX的更多信息。

Preview versions of Project Reunion

预览版的Project Reunion的Visual Studio扩展会在构建的时候部署预览版的框架包,使其称为一个NuGet包依赖。预览版的Project Reunion NuGet包也是如此。

Preview versions of Project Reunion

稳定版的情况下,会在打包描述文件中添加到框架包的依赖:

<Dependencies>
    <PackageDependency Name="Microsoft.ProjectReunion.0.8-preview" MinVersion="8000.144.525.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>

手动构建应用包的情况下,需要在打包描述文件中自己添加对PackageDependency的描述。

Deploy unpackaged apps that use Project Reunion

给出关于部署非MSIX打包的应用的指导。尚在试验阶段,具体略。

(本篇完)

2021-06-25 更新(Windows 11相关)

Windows 11与昨日正式宣布,Project Reunion也改名成了WindowsAppSdk了。

Introducing Windows 11 看,Windows 11像是Windows 10的精炼版,据说安装包精简了40%,操作接口也有一定变化;可以跑Android应用,使用的是Intel的Bridge技术。

Building a new, open Microsoft Store on Windows 11 看,支持更开发的商店,允许第三方结算,支持多种应用类型,包括Win32, .NET, UWP, Xamarin, Electron, React Native, Java, Progressive Web Apps,还有跟Amazon Store合作的Android应用商店。跟随https://aka.ms/blogsourcenewstore前往App发布网站。

What Windows 11 Means for Developers 看:

  • PWABuilder3可以方便构建PWA
  • WebView2运行时会内置
  • Windows Terminal会内置
  • Microsoft Edge DevTools会内置
  • Windows App SDK
  • ARM64 Emulation Compatible ABI用来构建ARM64程序,可以混合ARM和X86代码
  • 免费的Game Development Kit

https://www.microsoft.com/en-us/windows/windows-11似乎可以下载要给PC HealthCheck工具,用于检查是否能够升级Windows 11。

(更新完)