安装依赖组件

首先打开扩展和更新:



Windows程序打包,使用VS2017_快捷方式


扩展和更新

联机查找下面的组件,然后安装,重启VS。



Windows程序打包,使用VS2017_文件系统_02


安装依赖组件


创建项目文件

作为应用的主程序。比如这里我就创建一个简单的项目,只有一个窗口:



Windows程序打包,使用VS2017_快捷方式_03


创建一个简单的项目


创建一个打包项目

先右键解决方案,选择 添加-新建项目



Windows程序打包,使用VS2017_文件系统_04


创建打包项目

我这里就起名为​​PackageDemo Installer​​。



Windows程序打包,使用VS2017_文件系统_05


创建打包项目

另外,有些人可能会想这么多安装类型,怎么选。因为我们这里说Windows程序打包,想要输出​​.exe​​​和​​.msi​​,大概看一下介绍就能知道,第一个和第四个是合适的。这两个又该怎么选呢?那其实第四个就是对一些属性多了些引导,最终的项目结构和第一个是没有区别的。这里我们就选第一个。


配置

项目信息

配置项目信息,这里打开属性窗口。注意:不是在项目上右键-属性,而是选中项目后点击属性窗口查看:



Windows程序打包,使用VS2017_文件系统_06


查看项目属性

然后看各种对信息进行配置:



Windows程序打包,使用VS2017_ico_07


项目属性

这里对一些属性做下解释:

  1. 重要属性
  1. ​Author​​​和​​Manufacturer​​,分别是作者和制造商的意思,一般都写公司名。
  2. ​ProductName​​,软件名。默认是项目名,影响到安装界面和安装目录。务必改掉。
  3. ​Version​​,版本号,影响安装流程,后面会说。
  4. ​TargetPlatform​​​,意思很明显。表现层面上就是,决定你的安装目录是在​​Program Files​​​还是​​Program Files (x86)​​,根据项目决定。
  5. ​RemovePreviousVersion​​,是否移除之前的版本。务必改为True,不然你更新几次软件就会发现,电脑里多个版本都在安装着。
  1. 不重要的属性:
  1. ​InstallAllUsers​​,用户权限默认值。这个在安装界面还可以重新设置。
  2. ​ManufacturerUrl​​,公司官网。
  3. ​SupportUrl​​​、​​SupportPhone​​,技术支持的网址和电话。
  4. ​Description​​,软件描述。
  5. ​Title​​,无用。一开始我以为它是安装界面的标题,但其实并不是,这个值默认和项目名一致,但你修改之后,在哪里也都看不到。所以无用。

当然,现在我们还不能执行打包。还需要添加一些别的内容。

先看一下项目的文件系统

文件系统在项目刚创建的时候会默认打开,其他时候你也可以通过在项目上右键-View-文件系统打开。



Windows程序打包,使用VS2017_文件系统_08


文件系统

刚开始就会看到三个入口:

  1. ​Application Folder​​,这个是你的应用安装之后,文件所处的目录。
  2. ​User's Desktop​​,用户桌面,我们等下会需要在这里面放置一个快捷方式。
  3. ​User's Programs Menu​​,用户的程序菜单。就是按Windows徽标键或者是屏幕左下角的Windows徽标,会出现的一些文件夹和快捷方式。

添加文件或文件夹

有时候我们会需要手动添加一些默认文件到安装目录里,比如一些默认配置、一些DLL等。接下来演示怎么创建文件夹和添加文件。



Windows程序打包,使用VS2017_文件系统_09


添加文件或文件夹

比如我重复使用上边的操作,创建了多级的文件夹,接下来我们可以通过添加文件,往里面添加一些icon图标,等下可以用作快捷方式的icon。



Windows程序打包,使用VS2017_文件系统_10


添加几个icon文件

添加可运行文件及其快捷方式

先创建项目输出文件(一般都是.exe文件),即快捷方式要指向的文件:



Windows程序打包,使用VS2017_快捷方式_11


创建项目输出



Windows程序打包,使用VS2017_ico_12


项目输出配置

上面的流程也可以重复进行。针对多个项目创建多个项目输出,那样的话,就可以用启动不同的项目了。比如我们知道Git有GUI版本,也有命令行版本。就可以通过这种方式,创建多个输出文件。

添加完输出文件之后,我们就可以为这个输出创建快捷方式了:



Windows程序打包,使用VS2017_文件系统_13


创建输出快捷方式

比如这里创建出来的就是上面的那个​​Shortcut ....balabala​​的东西。这个快捷方式的名字需要修改,不然会直接在界面上显示这个名字。这里重命名一下即可。

输出文件(这里的主输出balabala​​)是不能改名字的,它是对应的安装目录里的输出文件。比如我这个项目在安装后,安装目录里就会有一个​​PackageDemo.exe​​的文件。

也可以多次为这个输出创建快捷方式。这样的话,之后可以直接将快捷方式复制到别的入口文件夹里(​​User's Desktop​​​/​​User's Programs Menu​​)。

这里我创建了多个快捷方式,并为它们改了不一样的名字。接下来,也为它们设置不一样的icon。

设置icon

先修改快捷方式的icon属性,这里默认为None,我们需要把它改为之前添加的icon图标。



Windows程序打包,使用VS2017_文件系统_14


修改图标



Windows程序打包,使用VS2017_文件系统_15


选择界面

在选择界面打开​​Browse...​​,找到之前添加的图标点击确认



Windows程序打包,使用VS2017_文件系统_16


选择完成

点击​​OK​​即可为快捷方式应用图标。其他的快捷方式也是一样的操作。


生成安装包并安装

在安装项目上右键,选择生成或重新生成。会执行打包操作。并会根据你的设置在项目的​​Debug​​​或​​Release​​​文件夹下生成一个​​.msi​​​文件和一个​​.exe​​文件。用户可以使用这个安装包进行安装。

安装界面如下:




Windows程序打包,使用VS2017_文件系统_17


安装界面1



Windows程序打包,使用VS2017_ico_18


安装界面2

  1. 那个​​任何人\只有我​​的选项就是我们之前提到过的​​InstallAllUsers​​指定值。
  2. ​PackageDemo Installer​​​的问题,可以看出来,这个名字很不合适,那我们能不能改掉这个名字呢?这里就是之前提到过的,项目属性窗口中的​​ProductName​​属性,将该属性设置为软件名称即可。

再看下安装之后的效果:



Windows程序打包,使用VS2017_文件系统_19


安装效果

可以看到桌面和程序目录里各有一个快捷方式,它们的名字和图标也正是我们在文件系统设置的那样。

再来看看安装目录里的东西:



Windows程序打包,使用VS2017_文件系统_20


安装后文件夹


一些问题

版本号问题

假设,你当前电脑上已经使用一个安装包安装了1.0.0版本的软件:

此时你再次点击同样的安装包:



Windows程序打包,使用VS2017_ico_21


同样的安装包

如果,你对项目做了一些修改后重新打包,却没修改版本号:



Windows程序打包,使用VS2017_文件系统_22


相同版本号,不同的内容

如果,你对项目做了一些修改后,也增加了版本号:



Windows程序打包,使用VS2017_文件系统_23


修改版本号

这样是可以正常安装的。并且如果你设置了移除旧版本,也会同时卸载掉旧版本软件。

生成失败

有时你执行了生成或重新生成却发现左下角提示生成失败



Windows程序打包,使用VS2017_ico_24


生成失败

然后打开错误列表,如果有错误的话,去修改错误(警告等是不会导致失败的,只查看错误就可以)。可是,有时候,会出现这种情况:



Windows程序打包,使用VS2017_文件系统_25


生成失败却没有提示任何错误

明明没有一个错误,却导致生成失败了?

这种问题,基本上都是文件系统引用到的文件位置发生了改变。就是说,你在上边执行的添加文件,其实只是把你电脑上的文件地址保存了起来,之后如果你的文件被删了或是换了位置,那之前添加的文件引用自然就会失效。这时候去仔细查看一下文件系统。

比如我把几个图标文件移动到别的文件夹之后:



Windows程序打包,使用VS2017_快捷方式_26


文件引用错误

这时候,把错误的引用删掉,重新将文件添加进来即可。注意:icon文件修改后,引用icon的快捷方式也需要修改icon路径。


一个建议

在安装项目内创建一个文件夹,专门用于放置安装项目所依赖的文档、图标等,避免引用的文件移动后还需要重新设置。