VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级

VS安装包制作介绍(使用InstallerProjects制作安装包)

一、介绍

功能:Installer Projects 是一个用于发布VS项目的官方扩展,可以将VS中开发的程序打包成标准的windows安装包,分发给用户安装。

版本:VS2013之前的版本默认自带Installer功能,VS2013之后的版本默认是不包含Installer模板的,所以需要自行去安装。

安装方法:

1、打开VS,选择 扩展-->管理扩展-->联机 (或者选择 工具-->扩展和更新-->联机),搜索Microsoft Visual Studio Installer Projects,进行安装,安装好之后,重启vs

2、去官网下载VS对应版本的InstallerProjects,在此附上适用于VS2017VS2019InstallerProjects下载地址https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects

二、制作安装包

2.1添加Setup项目

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第1张图片

2.2 配置 Setup 项目
1. Author 一般填公司名,会使用其作为软件安装目录名
2. ProductName 应用程序名称,会使用其作为软件安装目录名
3. Localization 指定软件运行地语种
4. TargetPlatform 指定软件目标平台 x86 or x64
5. Version :发布版本号
6. InstallAllUsers True 效果:“控制面板”程序中会显示公司的名称,安装时默认为“任何人”
7. ProductCode 默认给出无需修改,当 Version 变动时会提示更改
根据以上配置系统安装目录默认为: [ 系统主目 ]\[Author]\[ProductName] ,安装时会创建两层的文件路径

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第2张图片

 

 
2.3 文件夹说明
1. Application Folder 应用程序包含的文件设置。
2. User's Desktop 用户桌面快捷方式设置。
3. User's Programs Menu 用户启动菜单的快捷方式设置。
 
2.4 文件类型
1. Folder 添加目录
2. 项目输出: 将选中项目生成 dll 或者 exe
3. 文件: 按照原格式输出,添加额外的依赖文件( html 、不被主程序所引用的 dll exe 等)
4. 程序集: 选择指定版本程序集输出

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第3张图片

 

2.5快捷方式生成步骤
1. Application Folder 文件夹中选中主输出右键生成快捷方式,将快捷方式移至 User‘s Desktop

User‘s Programs Menu文件夹中(如下图所示)

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第4张图片VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第5张图片

2.设置快捷方式属性,修改快捷方式名称和图标(.ico格式),如下图

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第6张图片

 

2.6添加卸载程序
1. 卸载功能实现: C:\Windows\System32\msiexec.exe
2. Application Folder 文件夹中添加 msiexec.exe ,创建快捷方式,并设置属性 Arguments=/x {1028BF2E-832F-4B79-8D54-01CFB4BB30EC}  

(备注:{1028BF2E-832F-4B79-8D54-01CFB4BB30EC} Setup项目属性中的ProductCode,当项目属性中ProductCode改变时,卸载这里的Arguments需要跟着改变)

2.7依赖框架
  1. 右键Setup项目-->属性-->Prerequisites
  2. 在系统必备的窗体中,勾选Framework 4.6(开发的应用程序所使用的Framework版本,示例中为4.6),选择从组件供应商的网站上下载系统必备组件(此选项会提示客户去微软官网下载Framework 4.6 )。
  3. 指定系统必备组件的安装位置其他选项:需要提前把Framework 指定版本的安装包下载下来放置相应目录下
  4. 启动条件:右键Setup项目-->View-->启动条件,.NET Framework属性Version改为.NET Framework 4.6(与系统必备Framework版本一致)

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第7张图片

 

生成安装包

1、以上配置完成,编译Setup项目即可在“Setup项目/Release”生成安装包。

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第8张图片

 

2setup.exeSetup.msi的区别

msi文件时windows installer开发出来的程序安装文件,它可以让你安装、修改、卸载你所安装的程序,也就是说VS工具打包生成的msi文件就是windows installer的数据包,把所有和安装文件相关的内容封装在一个包里。VS工具打包生成的exe文件是主要是用于检查安装的环境(系统必备),当安装的环境检查成功后,会自动再安装msi文件。

3、补充(无需卸载旧包直接覆盖升级):安装以上步骤生成的安装包,若程序更改后再次生成的安装包,安装时会提示已经安装了该产品的另外一个版本(如左下图),此时则需要使用控制面板或卸载程序(2.6中有介绍)卸载掉旧包,然后才能安装新包。若程序更改想要直接覆盖升级,则需要修改Setup项目属性(2.2 配置Setup项目中有介绍),将Version改为大于原版本号,修改后系统会自动提示是否修改ProductCode(如右下图),此时点“是”,此时生成的安装包运行则不会再提醒左下图了。

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第9张图片VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第10张图片

到这一步还未完,虽然此时未卸载旧包可以直接安装了,但是安装后的dll和exe仍然是旧版本的dll、exe,要解决这个问题则修改所有程序集的版本号(程序集右键属性-->应用程序-->程序集信息)(如下图),修改程序集版本和文件版本,大于原版本号即可。然后重新生成的安装包就可以不用卸载直接覆盖升级啦。

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第11张图片

自定义安装程序类

制作安装程序时,可以添加自定义安装程序类,在此类中编写安装过程中的一些自定义操作。
添加自定义安装操作类。
VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第12张图片
打开 Installer ,这个 class Installer 继承自 System.Configuration.Install.Installer ,里面就一个构造函数。现在安装程序不能完成的功能,都可以在这个类写代码来自己实现。 
 
 

打包程序增加自定义操作

1.Setup项目右键-->View-->自定义操作,可以看到有四个子项:安装、提交、回滚、卸载,如右图所示

2.Install上点击右键-->添加自定义操作-->Application Folder -->【主输出这样,重新生成后,安装之后就会执行 OnBeforeInstall OnAfterInstall BeforeInstall事件、 AfterInstall事件的代码了。)

VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第13张图片VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级_第14张图片

CustomActionData 属性

自定义操作的附加数据,读取自定义操作的安装信息,需采用/name=value 的格式。多个值必须以单个空格隔开:/name1=value1 /name2=value2。如果值内有一个空格,则必须加引号:/name=a value”

举例:获取程序安装路径: /name=“[TARGETDIR]\”   代码中引用参数: this.Context.Parameters["name"];

InstallerClass 属性

为了使自定义操作被视为安装组件,必须将 InstallerClass 属性设置为 true。(该属性默认为true

 

 

 
 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(VS程序打包(使用InstallerProjects制作安装包)、自定义安装程序类、不用卸载旧包直接覆盖升级)