[C#.net资料]visual studio打包可安装的exe程序(添加配置文件),新手小白最全教程 - 知乎

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

打包WPF应用程序

1、安装 InstallerProjects

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

2、新建 Setup 打包项目

2.1 打包之前,请先生成一个稳定的可执行项目,这个可执行项目就是要打包的对象

如果有图标,可以先设置图标后再生成

2.2 添加执行打包的steup项目

选择 解决方案-->添加-->新建项目

搜索 setup --> 选择 Setup Project --> 点击 下一步

温馨提示:

这个setup的项目名称会成为你最终打包好以后安装程序的默认安装目录名称(所以不要随便取名)

新建完成后,会出现以下界面

如果没有自动打开这个界面,那么请按照以下操作打开这个界面:

选择 你的Setup项目 --> View --> 文件系统

Setup 属性说明:

  • Author : 一般填公司名,会使用其作为软件安装目录名
  • ProductName : 应用程序名称,会使用其作为软件安装目录名
  • Localization : 指定软件运行地语种
  • TargetPlatform : 指定软件目标平台 x86 or x64
  • Version :发布版本号
  • InstallAllUsers : True 效果:“控制面板”程序中会显示公司的名称,安装时默认为“任何人”
  • ProductCode : 默认给出无需修改,当 Version 变动时会提示更改

根据以上配置系统安装目录默认为: [ 系统主目 ]\[Author]\[ProductName] ,安装时会创建两层的文件路径

3、配置 Setup 项目 主输出对象

右键 Application Folder --> Add --> 项目输出

3.1 Application Folder 右键菜单说明:

  • Application Folder : 应用程序包含的文件设置
  • User's Desktop : 用户桌面快捷方式设置
  • User's Programs Menu : 用户启动菜单的快捷方式设置

3.1.1 Add 类型说明:

  • Folder : 添加目录
  • 项目输出: 将选中项目生成 dll 或者 exe 等
  • 文件: 按照原格式输出,添加额外的依赖文件( html 、不被主程序所引用的 dll 、 exe 等),需要注意的是,这里只添加 当前路径下的文件,不包含文件夹以及文件夹中的子文件
  • 程序集: 选择指定版本程序集输出

4、添加外部依赖文件夹或者配置文件夹

重点来了,这里其实很简单,直接拖进去就完事,往往很多太过简单的事情,就是最容易被忽略的,也是小白最容易踩的坑。

5、添加项目文件

右键 Application Folder --> Add --> 文件

6、添加桌面快捷方式

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

千万不要忘记设置快捷方式名称和图标

7、生成可安装exe程序

选择 Setup 项目 --> 右键 生成

setup.exe 与 Setup.msi的区别

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

补充一点:

有时候版本升级后,打包会报错,可能是因为你这次打包中所需要的文件已经有变化,比如删掉了部分文件,或者新增文件,或者把文件移动到了其他位置,这个时候打包就会报错,因为你删除,新增或者移动,那么你都需要在 Application Folder 中做相应的修改,这个坑,如果我不说,新手必然会踩,总之我是踩过了的。

8、添加卸载程序

  • 卸载功能实现需要添加: C:\Windows\System32\msiexec.exe
  • 在 Application Folder 文件夹中添加 msiexec.exe ,创建快捷方式,并设置属性 Arguments=/x {1028BF2E-832F-4B79-8D54-01CFB4BB30EC} (备注:{1028BF2E-832F-4B79-8D54-01CFB4BB30EC} 为 Setup 项目属性中的 ProductCode ,当项目属性中 ProductCode 改变时,卸载这里的 Arguments 需要跟着改变)

这里需要注意的是 Arguments 的值前面需要加 “/x ”,注意一定要加,否则卸载程序用不了

补充一点:

使用卸载功能的时候,如果打包时所有打包进去的文件缺少了任何一个,卸载时都会报错,所以,打包时请务必确保所有打包文件在使用过程中,不会被删掉,虽然这么说很傻,但有时真有这种安装时需要用到,而使用时会被某些功能删掉的情况,总之我就有。

9、无需卸载旧包直接覆盖升级

安装以上步骤生成的安装包,若程序更改后再次生成的安装包,安装时会提示已经安装了该产品的另外一个版本,此时则需要使用控制面板或卸载程序卸载掉旧包,然后才能安装新包。

 

若程序更改想要直接覆盖升级,则需要修改 Setup 项目属性,将 Version 改为大于原版本号,修改后系统会自动提示是否修改 ProductCode,此时点“是”,此时生成的安装包运行则不会再提醒了。

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

至此,打包就已经圆满结束。

打完收工~~~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐