# 程序安装实质 我们知道,大部分软件都需要先安装才能使用,例如 QQ、360、迅雷等,要先从网上下载一个安装包,然后安装到计算机的C盘或者D盘等。大部分程序还会在开始菜单或者桌面上生成一个快捷方式,用户只要点击快捷方式,就可以启动软件。 那么,一个程序为什么要安装呢?下载后直接使用不可以吗?下面我们就来分析一下。 不同的操作系统,安装软件的方法虽然不一样,但基本原理是相同的,主要的思想就是将程序的二进制可执行文件拷贝到某个目录,设置一些路径。如果程序运行时需要一些库,将这些库拷贝到系统目录即可。 程序的安装基本上要经过下面四个步骤: 1) 将程序的可执行文件从安装包所在的位置,拷贝到要安装的目录。 安装程序的时候,程序会给用户指定一个默认的安装目录,如果用户需要,也可以自定义安装,改变安装目录。一般所谓的“绿色软件”到此就安装结束了,可以使用了。 2) 如果有必要,可以向系统目录拷贝一些动态链接库(DLL)。(可选操作) 有的程序,比如大型游戏,可能需要很多动态链接库(DLL)的支持,这时候程序可能会将这些 DLL 拷贝到系统库的默认目录,Win7 下一般拷贝到`C:\\Windows\System32\`(读者不妨打开该目录,会看到很多 DLL 文件)。 有些程序用到的 DLL 文件不是系统必需的,只能由程序自己使用,这样放在系统目录里就不太合适,安装的软件多了,就会造成系统臃肿,所以这些 DLL 会被拷贝到程序的安装目录。 3) 向系统注册表中写入相应的设置项,注册程序或者库的安装信息。(可选操作) 安装前,用户可能会对软件做一些设置,安装时,这些设置就会被写入注册表。另外,当安装程序将 DLL 文件拷贝到系统目录时,一些 DLL 还需要向系统注册,告诉系统我在这里,不然使用的时候可能会找不到。 4) 在开始菜单或者桌面上位程序创建快捷方式。(可选操作) 创建快捷方式主要是为了用户使用方便,有了快捷方式,就不用再到安装目录去启动程序了。 由此可见,程序在安装前后并没有什么区别,只不过是进行了一些设置,有的设置是程序运行所必须的,有的是为了让用户更加方便。 # 制作安装包引导用户安装 经过多年的发展,Windows 安装包的制作技术已经非常成熟,有不少现成的工具,无需我们自己编写代码,例如 Inno Setup、NSIS、Advanced Installer、Setup Factory、Smart Install Maker、Nullsoft、InstallShield,Advanced Installer 等。软件安装的过程大部分是文件拷贝的过程,如果不需要写入注册表,不需要向不同的目录拷贝 DLL,那么使用 WinRAR 也可以制作简单的安装包。 当然号称宇宙第一 IDE 的VS也有这功能。 1、要想要制作安装包工具,那么首先需要VS的一个插件:Microsoft Visual Studio Installer Projects,下面先安装一下。选择 【】 --> `扩展和更新` --> `联机` ,稍微搜索一下就能够找到它。 ![Snipaste_2022-04-28_11-16-25](https://wangyuedong-img.oss-cn-beijing.aliyuncs.com/img/Snipaste_2022-04-28_11-16-25.png) 2、重启VS后,我们新建一个项目就会在其他项目类型中看到这个Visual Studio Installer的选项。 ![image-20220428112152695](https://wangyuedong-img.oss-cn-beijing.aliyuncs.com/img/image-20220428112152695.png) 3、我们新建一个项目,看到下面这样的内容。 ![image-20220428120126880](https://wangyuedong-img.oss-cn-beijing.aliyuncs.com/img/image-20220428120126880.png) 窗口下的对应的三个文件夹说明: - Application Folder:应用程序包含的文件设置,最终在用户电脑上安装的根目录; - User‘s Desktop:用户桌面快捷方式设置,一般放个快捷图标; - User’s Programs Menu:用户启动菜单的快捷方式设置,一般也是对应的快捷方式。 部分项目配置信息,菜单里面的 【视图】-->【属性窗口】,里面的部分属性介绍: - Author和Manufacturer,分别是作者和制造商的意思,可以写公司名。 - ProductName,软件名。默认是项目名。 - Version,版本号。 - TargetPlatform,决定你的安装目录是在Program Files还是Program Files (x86),根据项目决定。 - RemovePreviousVersion,是否移除之前的版本。务必改为True,不然更新几次软件就会发现,电脑里会存在多个版本。 4、添加项目输出 添加入口文件(也就是main方法) 5、添加图标文件 选择【Application Folder】右键-->【Add】-->【文件】,图标文件后缀名为.ico。 6、右键生成基本就可以了 可以看到在项目文件夹中生成的Debug文件夹下的安装包文件,一个是setup.exe安装包,另一个是.msi的安装包。 ![image-20220428125722016](https://wangyuedong-img.oss-cn-beijing.aliyuncs.com/img/image-20220428125722016.png)