C# WinFrom打包不怎么常用,但一年总有那么一两次,每次都记不全,为了方便自己回看,于是有了本篇文章。

本例使用《C#工具类LogHelper》的解决方案作为例子,实现WinForm打包,以及升级的功能,本文使用VisualStudio2017工具。

一、在解决方案--添加--新建项目,选择其它项目类型--Visual Studio Installer,选择Setup Project。

点击确定后如下图所示,会安装一个Setup1的安装程序配置项目。

如果没有找到“Visual Studio Installer”,可到 VS 工具栏 > 工具 > 扩展和更新 > 联机 > 搜索 Microsoft Visual Studio Installer Projects 并安装。安装完成后需要重启 VS。

二、设置软件图标。

https://www.easyicon.net/随便搜索一个ico后缀的图标,并放到项目的Icon文件夹下。

为主窗体添加图标:

三、设置导入内容

1、点击Application Folder ->Add -> 文件。

2、选择项目bin Debug文件夹,Ctrl+A 全选所有内容,之后点击"打开"。

3、如果有文件夹,需在 Application Folder ->Add-> Folder中添加。本项目有Log文件夹和Icon,所以在 Application Folder 需要添加Log文件夹和Icon文件夹,如下图所示。

添加Log文件夹和Icon文件夹后:

四、设置输出内容

1、选择在Application Folder-->Add-> 项目输出 。

2、点击确定。

3、在"主输出from xxx",右键--Create Shortcut to 主输出 from xxx

4、将"Shortcut to 主输出 from xxx"拖动到 User's Desktop。

将 User's Desktop的"Shortcut to 主输出 from xxx"自定义名称,此处我改为WinFormDemo,并设置图标。

五、设置卸载项

1、点击Application Folder ->Add -> 文件,选择“C:\Windows\System32” 中的 msiexec.exe。

2、将msiexec.exe 创建一个快捷方式,并改名为 Uninstall 。

3、创建好Uninstall 快捷方式后,点击SetUp的属性,复制ProductCode中的内容。

4、 将复制好的ProductCode 内容,粘贴到创建好的Uninstall的属性Arguments中,并在ProductCode 前加入“/X”

5、总的来讲就是将“主输出from xxx”和msiexece.exe创建快捷方式,并分别重命名后,拖动到 User's Programs Menu。这个的作用就是在用户程序菜单显示程序的进入快捷方式和卸载快捷方式。

创建文件夹WinFormDemo,并将两个Shortcut移到文件夹里,如下图所示。

六、设置版本覆盖。

七、生成

在Setup1右键,生成。

生成后,在Setup1的项目的Debug下就有安装文件的exe了。

八、效果

安装后效果如下:

九、升级

1、在AssemblyInfo.cs设置新版本号。

2、将Setup1属性里的Version同步更改,会提示会改会ProductCode,点击“是”即可。

注:这里Version的版本号只有3位,如果设为1.0.0.1,则在发布时显示此错误“ERROR: Invalid product version '1.0.0.1'. Must be of format '##.##.####'”,若有知晓的朋友请告知。

3、修改所有Unistall的Arguments为:/X {新的ProdcutCode}

4、生新发布Setup后,安装exe,最后效果如下:

十、下载

https://files.cnblogs.com/files/suterfo/WinFormDemo.rar

参考文章:

1、https://blog.csdn.net/u014234260/article/details/80067254

2、https://blog.csdn.net/lxrj2008/article/details/80611164

3、https://blog.csdn.net/m0_37862405/article/details/80785294

4、https://www.cnblogs.com/duanweishi/p/11114332.html

最新文章

  1. centos6.5 mysql-server 5.1.73启动失败
  2. 数字信号处理实验(四)——数字滤波器结构
  3. backbone学习笔记一
  4. SSH框架中 Spring设置定时器 Quartz
  5. java连接mysql(二)
  6. NOIP201105铺地毯
  7. 关于版本号:alpha、beta、rc、stable
  8. 【转】Mac OS X开机启动Path had bad permissions错误解决方案
  9. 生成器generator
  10. Gulp vs Grunt 前端构建工具对比
  11. 几款国产开源的Windows界面库
  12. 在VC6.0下如何调用Delphi5.0开发的进程内COM
  13. How to Type(dp)
  14. 在ubuntu linux 中编写一个自己的bash脚本
  15. 第三章:3.3 post 请求
  16. RBAC权限管理系统
  17. [大数据面试题]storm核心知识点
  18. page-break-after:always不能正常工作
  19. 【转】安全加密(五):如何使用AES防止固件泄露
  20. 浅谈压缩感知(六):TVAL3

热门文章

  1. WeChall_Enlightment (Encoding)
  2. Eclipse导入项目提示No projects are found to import解决办法
  3. [信息安全] 05 X.509 公钥证书的格式标准
  4. NR / 5G - F-OFDM
  5. Hapi+MySql项目实战路由初始化(二)
  6. AJAX传输图片文件
  7. es5实现一个class
  8. python随用随学20200220-异步IO
  9. C++泛化单链表
  10. Hibernate入门之命名策略(naming strategy)详解