C#学习记录——C# winform程序怎么打包成安装项目(VS2019图解)

news2024/11/16 22:48:40

今天学习将Winform程序打包成安装项目,参考网上教程,并记录尝试过程。
测试打包的程序为用C# Winform开的的一个客户端程序。

1、安装打包插件

在程序打包之前需要安装Microsoft Visual Studio Installer Projects插件。

1.1、选择扩展管理

在VS2019上方选项卡中点击“扩展”——“管理扩展”;
在这里插入图片描述

1.2、下载插件

点击“联机”——>“搜索”——>“下载”
在这里插入图片描述
在这里插入图片描述

1.3、 安装插件

安装时,按照提示安装即可,安装好后需要重新打开VS2019;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、打包项目

2.1、创建安装项目

首先,打开VS2019——“创建新项目”;
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
创建好后进入如下界面:
在这里插入图片描述
里面最左侧的框框有三个文件夹

1).“应用程序文件夹”即"Application Folder"表示要安装的应用程序需要添加的文件;

2).“用户的‘程序’菜单”即"User’s Programs Menu"表示:应用程序安装完,用户的“开始菜单”中的显示的内容,一般在这个文件夹中,需要再创建一个文件用来存放:应用程序.exe和卸载程序.exe;

3).“用户桌面”即"User’s Desktop"表示:这个应用程序安装完,用户的桌面上的创建的.exe快捷方式。

2.2、右键“应用程序文件夹”,添加——文件

在这里插入图片描述
添加的文件一般是已经编译生成过的应用程序项目的debug目录下的exe文件(即位于…/bin/Debug文件夹下的主程序exe文件)

添加后,一般它会自动把exe程序所需的依赖项也加进来,如dll文件
在这里插入图片描述

2.3、创建快捷方式

(1)右键主程序exe文件,选择“创建快捷方式到……”
在这里插入图片描述
(2)然后,中侧框框里会出现一个快捷方式项,将它剪切,粘贴到“用户桌面”文件夹下
在这里插入图片描述
(3)至于快捷方式的名称、图标、描述等其他属性,可以在属性面板中设置,如下
在这里插入图片描述
这里我只设置了名称和图标
在这里插入图片描述

2.4、添加卸载程序

既然有安装就有卸载,卸载程序其实是一个Windows操作系统自带的程序(C:Windows\System32\Msiexec.exe),只不过是通过给它传特殊的参数命令,来让它执行卸载

添加和设置卸载程序的操作如下:

(1)首先,将卸载程序放在“应用程序文件夹”目录下,右键“应用程序文件夹”,添加——文件,在系统盘下找到这个路径文件——C:Windows\System32\Msiexec.exe添加进去
在这里插入图片描述
2)由于Msiexec.exe这个名字不够直观,所以一般接下来我们会对它重命名,一般改为“卸载.exe”或“UnInstall.exe”,然后给它创建快捷方式并将快捷方式放到“用户程序菜单”目录下
在这里插入图片描述
(3) 接下来是很关键的一步,设置卸载参数,告诉卸载程序该卸载哪个

A、首先,找到安装项目的ProductCode,在安装项目的属性面板中可以看到,如下

注意:先选中“四则计算器”不要右键点击选属性,直接侧边栏点属性
在这里插入图片描述
B、复制此ProductCode ,粘贴到“卸载.exe”快捷方式的Arguments属性,前面加/x空格,如下

在这里插入图片描述

2.5、其他设置(欢迎界面、安装步骤等)

如果还想对安装程序进行其他设置,比如,优化安装欢迎界面,自定制安装步骤,修改注册表,设置启动条件(比如要求必须先安装指定的.net FrameWork版本才可以启动)等,可以右键安装项目,在View中可以进行选择设置,如下
在这里插入图片描述
此处暂未设置,后期有需要用到了再补充上。

2.6、设置依赖环境

一般我们开发的程序都有一个目标框架,也就是所依赖的.net Framework版本环境,如.net Framework 4.0/4.5等

要想我们的程序能在电脑上正常运行,首先就得保证电脑上装有指定的.net Framework版本框架,可以在安装包的属性中设置,启动安装前检查操作系统中是否安装了指定版本的框架或其他依赖,设置方法如下:

(1)右键安装包项目,点开“属性”
在这里插入图片描述
(2)选择你程序需要的.net Framework版本以及其他依赖项
在这里插入图片描述
(3)可以选择“从组件供应商的网站上下载系统必备组件”,这样一来,即使电脑上没有安装需要的.net Framework也不要紧,只要设置了这项,安装程序会自动从微软的官网上下载对应的组件并安装,很方便

2.7、生成打包安装文件

(1)右键安装项目“Setup”,选择重新生成
在这里插入图片描述
(2)然后打开解决方案文件夹下的Debug或Release文件夹,就可以看到生成的安装文件

2.8、打包完成

看下能否安装

1、我们打开解决方案文件夹下的debug文件夹可以看到安装文件已生成

生成了.exe与.msi两个文件
经查找资料setup.exe里边包含了对安装程序的一些条件的检测,比如需要.net的版本是否安装等,当条件具备后,setup.exe接着调用setup.msi,而setup.msi则可以直接运行,如果你确定条件都具备的情况下。

2、测试一下,看是否可以安装运行:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(面经四):笔试

面试经历(四) 时间:2022-11-14 笔试 (培训机构真该洗啊,写完后根本不看你写的笔试,直接给你说送你去培训,技术什么都没有问,直接拿着你的简历画画,画什么实训和培训的不同…

Docker建立自己的私有仓库

仓库(Repository)是集中存放镜像的地方。 一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务 器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说&am…

Python学习------起步3(序列与数据类型转换)

目录 序列 1.切片 2.列表(list) 3.元组 数据类型转换 习题 好了,今天就开始序列的学习了,其实在C语言里面我们学过数组或者字符数组,Python中的序列跟它们一样是一种数据的储存方式,其中学习过程也是比…

LeetCode动态规划(九):完全背包(初级)

学习目标: 理解完全背包和0-1背包遍历顺序的区别 学习内容: 15. LeetCode377. 组合总和 Ⅳhttps://leetcode.cn/problems/combination-sum-iv/ 16. 爬楼梯(进阶班版) 17. LeetCode322. 零钱兑换https://leetcode.cn/problems/coin-change/ 18. Leet…

winform发布功能附加dll、db、xml、json等文件

我们日常进行程序的更新升级可能会用到winform的发布功能,但有些文件可能会无法伴随着发布一同发布出去或者每次发布后文件的数据被覆盖,下面一起看一下怎么解决: winform发布功能参考我另一篇文章https://blog.csdn.net/qq_39569480/articl…

筑基四层 —— 详解三子棋和扫雷

目录 一.修炼必备 二.三子棋详解 三.扫雷详解 四.三子棋和扫雷的完整代码 !!!恭喜你,成功突破至筑基四层!!! 一.修炼必备 1.入门必备:VS2019社区版,下载地址&#xff…

leetcode51,52 N皇后相关(回溯方法)

题目1:N皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题…

入职一年,那个准的下班的人,比我先升职了...

最近心态崩了。 和我同期一道进公司的人又升了一级,可是明明大家在进公司时,他不论是学历还是工作经验,样样都不如自己,眼下不过短短的两年时间便一跃在自己的职级之上,这着实让我有几分不甘心。 我想不明白&#xff…

谈谈Linux epoll惊群问题的原因和解决方案

近期排查了一个问题,epoll惊群的问题,起初我并不认为这是惊群导致,因为从现象上看,只是体现了CPU不均衡。一共fork了20个Server进程,在请求负载中等的时候,有三四个Server进程呈现出比较高的CPU利用率&…

OpenCV 图像平滑处理

本文是OpenCV图像视觉入门之路的第10篇文章,本文详细的在图像上面进行了图像均值滤波、方框滤波 、高斯滤波、中值滤波、双边滤波、2D卷积等操作。 OpenCV 图像平滑处理目录 1 均值滤波 2 方框滤波 3 高斯滤波 4 中值滤波 5 双边滤波 6 2D卷积(自定义…

电子技术——分立MOS放大电路

电子技术——分立MOS放大电路 有了前两节的学习,即三种放大器配置和偏置方法之后,我们可以通过现成的分立晶体管、电阻、电容等搭建分立MOS放大电路。 DC偏置基本结构 在本节我们选用的DC偏置基本结构是如图所示的源极恒流源的偏置方案,下图…

用#define宏实现Add函数

✋作者:阿润菜菜 📖专栏:C语言 我们知道#define宏是一种非常暴力的替换,宏定义会在程序编译预处理阶段在调用宏的位置进行文本内容的直接替换,因此我们在使用宏定义实现Add加法函数时就要注意一些可能会报错的问题。 …

第九层(10):STL之函数对象

文章目录前情回顾函数对象概念特点谓词概念内建函数对象分类算术仿函数关系仿函数逻辑仿函数下一座石碑🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C的路上会越走越远,后面不定期更新有关C/C语法&a…

你是如何学习 Java 的?

每一个行业中能成为大佬的人,一定都有他自己一套具有独到见解的方法...... 这个问题我很有发言权,从刚毕业做Java实习生月薪2k,到现在干了5年Java开发月薪43k,一直都在保持不断学习的状态。以我个人的经验来看,一个程…

视频分割新范式:视频感兴趣物体实例分割 VOIS

1. 背景视频中物体分割是视频理解的基础算法,也是对淘宝商品视频分析和加工所依赖的重要能力。传统的视频分割任务一般分为两种类型:一种是VOS(Video Object Segmentation),该任务需要在第一帧给出物体的初始分割标注&…

Linux系列 目录和文件管理

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 简介 本章重点 一.检查文本内容 ​编辑 1.cat命令——显示并…

MySQL分表查询之Merge存储引擎实现

概念介绍 MySQL 分表之后怎么进行联合查询?用有表数量限制的 union all,还是汇总到一张表再查询,亦或用Sphinx( 高性能SQL全文检索引擎 )? 在这篇文章里,介绍使用 Merge [mɜːrdʒ] 存储引擎…

浅读人月神话(2)

读书笔记:今日翻书浅读,从《为什么巴比伦塔会失败》开始至《干将莫邪》结束,巴比伦塔的建造对当下项目推进有广泛借鉴意义,今天这几个章节在PMBOK中有一些可以互相对照学习的内容,《为什么巴比伦塔会失败?》…

荔枝派 zero 使用 Jlink 调试

Jlink 所谓硬件版本,就是这个调试器的硬件是第几代,我手上的这个是 V8 所谓固件版本,就是这个调试器主芯片中内置的软件是什么版本,我刷入的是 J-Link ARM V8 compiled Nov 28 2014 13:44:46 所谓 Jlink 工具版本,就…

记录--原生 canvas 如何实现大屏?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 可视化大屏该如何做?有可能一天完成吗?废话不多说,直接看效果,线上 Demo 地址 lxfu1.github.io/large-scree…。 看完这篇文章(这个项目)&#xff…