关于 Windows 10 中的 MSIX 格式安装包,还是这两天第一次看到,看到我真的落伍了,感激趁机学习了一下。其实从 Windows 8 引入 Windows 商店开始,在 Windows 系统中软件就分为两大类,一类是传统的.exe文件系统,称之为“程序”(Program Files),一般装在C:\Program Files下,这个不用多说,大家都知道;还有一类则称之为“应用”(Application),大多安装在C:\Program Files\WindowsApps下。

  对于传统的标准EXE程序,默认使用的是MSI封装格式,MSI是Microsoft Installer的简写,是微软格式的安装包,Windows 10应用则使用APPX格式封装。这样开发者为Windows 10系统开发应用时就常常需要使用两种独立封装格式。为了简化开发者的封装工作,微软引入了全新的安装包格式MSIX(=MSI+APPX),这就是MSIX的来由。

Windows 10 MSIX

MSIX封装解析

  如上所述,MSIX=MSI+APPX,微软推出这种格式的目的是为了简化开发者的封装工作。那么MSIX是怎么实现这个功能的呢?

  首先我们来了解一下MSI封装格式。MSI文件是Windows Installer的数据包,从本质上讲它实际上是一个数据库,其中包含一个程序所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。它将单纯的程序文件和功能封装在一起,并且包含有关的安装过程信息,比如安装路径、系统运行库文件、安装选项等信息。这样使用标准MSI格式封装的程序,我们在安装的时候可以记录各种详细的信息,卸载的时候则可以根据这些信息将程序完全卸载,即使安装过程中出现错误,我们同样可以借助这些信息恢复到安全前的状态。因此很多大公司开发的软件都使用MSI格式进行封装。

  APPX则是Windows 8之后新增的一种应用格式,其实质是一个准备好分配和安装的应用程序包。将安装包上传到Windows商店后,在出售之前,商店会运行安全性和遵从性测试,确保用户从应用商店下载的都是安全性的应用。但是由于目前CPU架构有ARM、x86、x64之分,因此APPX主要有.appx(非通用安装包,在ARM、x86、x64设备上需要不同的安装包)、.appxbundle(同一应用的APPX打包,将不同平台需要的APPX压缩在一起)、.appxsym(UWP符号文件)、.appxupload(开发者向商店上传应用用的文件)四种格式。

  Windows 10应用商店是微软目前全力推广的应用安装方式,为了实现全平台(ARM、x86、x64)兼容,微软在MWC 2015上首次推出Windows 10通用应用(Windows 10 Universal APP)。它构建了一整套可以在各种Windows平台上使用的通用而现代的跨语言API,再加上良好的文档和应用商店体系,实现了开发者的一份代码几乎完全不用改动,只用在生成安装包的时候勾选几个选项,就可以实现应用的跨平台安装。

  对于应用,UWP解决了跨平台封装难题。不过从上面的介绍可以知道,UWP(APPX封装)和MSI是两种完全不同的封装格式,它们分别对应微软全力推广的应用和目前最为普及的EXE程序。如何让这两者整合在一起?MSIX应运而生,它汇集了APP应用程序和MSI文件封装格式的功能。全新的MSIX安装器将支持所有的Windows文件格式,包括Win32、WPF、WinForm和UWP。这样开发者只要遵循MSIX封装协议,将开发的应用程序封装为.MSIX格式后发布到Windows 10应用商店,用户下载后就可以根据自己的实际需要自行选择安装方式。

  比如很多习惯Windows 7的用户喜欢运行EXE文件,这种类型的程序功能更全面,擴展功能更丰富;但是很多平板用户则更喜欢APPX应用,这种应用界面清爽,操作简单。以后我们只要从应用商店下载安装自己喜欢的应用即可,而不是像现在EXE程序要到华军这些网站下载,应用则要到商店下载。

MSIX 将带给我们安全和便利

  如上所述,传统EXE文件的功能强大,但是大家也知道很多恶意软件、病毒也都是使用这种格式开发的。平时我们电脑的病毒、木马大多是EXE文件带来的,传统程序在带来便利的同时也给我们带来极大的安全隐患。

  应用相对EXE程序来说安全性就提高了许多,这是因为一方面应用的开发需要打包证书(这样通过证书就很容易追溯到恶意应用的开发者);另一方面应用安装包在上传到商店后需要通过微软的审核,运行安全性和遵从性测试,彻底杜绝恶意软件的入驻。因此从商店下载的MSIX文件可以给用户带来前所未有的安全性。当然二合一方式的封装也便于用户自行选择安装方式,同样给开发者带来极大的便利,而且微软会将MSIX文件格式进行开源化。期待MSIX文件的普及早些到来。