控制复杂性是计算机编程的本质。—— Brian Kernighan

普及一下windows安装程序和安装目录的一些内容。

由于作者水平有限,因此结构比较松散。

MSI&EXE&Appx&MSIX

一般来说大家使用电脑的过程中安装软件都会涉及到exe,极少数时刻会涉及到msi;如果是使用uwp比较多的同学,可能还会涉及到appx等文件格式等等。

1、MSI是Windows最基本的安装格式

MSI是Microsoft Installer的简写, 它使用微软提供的标准安装卸载界面,只能进行简单的安装卸载操作。另一种程度上,也可以把它看作是还原镜像,因为在MSI不会检测系统环境,覆盖安装将会使应用程序回到以前的状态。

值得一提的是,MSI包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性,安装过程透明可见。

由于MSI只有单纯的安装功能,使其更多应用于企业部署上(毕竟没有高级选项这种东西)

2、EXE安装程序是在MSI格式上的一次升级

EXE 格式可以看作是在MSI格式上的封装,有以下几个特点:

  • 可以实现运行环境检测。在安装软件的时候也会自动检测当前系统是否满足软件的运行环境,避免出现安装之后无法运行的现象
  • 更友好的安装界面。一般来说会实现更为美观的安装界面,版权声明等等,但是不排除一些厂商夹带“好心帮用户安装”的“私货”
  • 高级安装选项。包括但不限制于软件的安装路径,软件的附加组件等等

3、AppX安装程序用于通用Windows应用程序

AppX 是微软试图进入移动设备市场过程中产生的安装程序,安装之后一般是uwp程序,具有以下几个特点

  • 由于为了保证系统环境的纯洁,避免应用程序对系统环境造成污染。Appx的应用程序都是运行在沙盒之中的,通过windows提供的接口对功能进行实现。顺便一提,uwp应用程序内存在一个代理回环,需要借助工具打开一个口子才能对其中的应用程序实现代理
  • 基于上述的沙盒的缘故,uwp应用程序能够做到直接覆盖升级,完全干净的卸载,无需担心卸载残余之类的(在EXE的应用程序有相当一部分是把原文件删除之后释放新版本的文件实现升级的)
  • 安装上的也是采取和移动操作系统一样的“只有下一步”模式;但是相对封闭的环境导致uwp程序出现问题时,很难修复

现在微软提出了下一代安装程序MSIX,集成了Windows之前的文件格式安装技术,并继承了UWP的特性,更加安全和可靠,网络带宽优化,磁盘空间优化,程序自定义,支持全部的Windows应用程序,并且也能干净地卸载。

(是不是感觉很好?但是考虑到Windows令人发指的兼容性,MSIX目前只存在一部分windows商店的程序当中)

安装到Program Files与USER目录的区别

先写一个简化版

  • 对象:一般来说,安装到Program Files的应用程序是给所有用户使用的,安装给USER目录是给当前用户使用的。之所以各位感受不到区别是因为基本上电脑都是单用户模式,所以感知不太明显。
  • 权限:Program Files需要管理员权限才能写入修改,一般用户无法修改。同学们日常使用administrator的话不觉得,但如果你只是一个users组的用户就不太开心了

这里贴一个详细版

C:\Program Files,64位的软件安装目录,所有用户都能使用,程序安装到这里需要管理员权限。若程序数据也写在这个目录下,软件每次启动都会要求授予管理员权限,存在很大的安全隐患。

C:\Program Files(x86), 和上面的一样,只是该目录用于存放32位的应用。C:\Users\用户名\AppData\Roaming,通过环境变量 %AppData% 可以访问,这里用来存放当前登录用户所产生的数据,对其他的用户不可见。如果你在公司网络,加入了域,这个文件夹会通过网路同步,让你的数据在不同的计算机上漫游。该目录常被滥用。

C:\Users\用户名\AppData\Local,通过环境变量 %LocalAppData% 可以访问,这个目录和上面的基本一样,不过仅限本地,加入了域也不会同步。一般情况下,如果不加入域,Roaming和Local并没有什么区别,但是需要网络同步的时候,尽量把不必要的数据留在本地。个人使用的软件可以装在C:\Users\用户名\AppData\Local\Programs下面 。

C:\ProgramData,和AppData的区别在于,这里存放的数据是公用的,如果你希望软件的数据在所有的用户之间保持一致,那么程序生成的数据应当存放在这里

关于软件安装和数据存放的位置,取决于软件开发者和安装包制作工具的设定。如果开发者不遵写开发规范,应用程序的数据就会在系统内随意读写。。。

如果有强烈的洁癖的话,使用绿色软件是一个保持系统纯净的好办法

参考文档

参考了很多。。。记不过来了