当前位置: 首页 > news >正文

WinForm用微软打包工具打包

WinForm用微软打包工具打包

1. 安装扩展

下载扩展Microsoft Visual Studio Installer Projects

点击扩展 —> 管理扩展
在这里插入图片描述
安装完之后重启VS就好了。

2. 新建Set up项目

点击解决方案 —> 添加 —> 新建项目

选择这个Setup Project
在这里插入图片描述

创建打包项目
在这里插入图片描述

在这里插入图片描述
安装项目,三个目录的作用
Application Folder: 即 “应用程序文件夹”,表示要安装的应用程序需要添加的文件(注:如果项目中用了三方开源插件,也需要在里面添加上)
User‘s Desktop: 即 “用户桌面”,表示这个应用程序安装完,用户的桌面上的创建的.exe快捷方式
User’s Programs Menu: 即 “用户的程序菜单”,表示应用程序安装完,用户的“开始菜单”中的显示的内容,一般在这个文件夹中,需要再创建一个文件夹用来存放:应用程序.exe和卸载程序.exe

3. 应用程序文件夹下添加文件

把项目Release目录下所有文件全部拖进Application Folder里面,因为有可能生成的文件夹里面有嵌套子文件夹,这些子文件夹也需要一起存在的,不然引用会有问题。

在这里插入图片描述
拖进来就变成这样子了。

4. 添加运行环境

Application Folder —> Add —>项目输出,选择项目、主输出 —> 确定
在这里插入图片描述

默认选项就可以了

创建主输出文件的快捷方式,拖进User’s Desktop(用户桌面)
在这里插入图片描述
然后重命名一下
在这里插入图片描述
右击您新建的Setup项目—> 属性—>点击Prerequisites…

在这里插入图片描述
这个根据你项目需要选择就行了,不需要的话也可以不用装。

5. 添加程序图标

右击Application Folder(应用程序文件夹)—> Add —> 文件,将你的icon文件导入

在这里插入图片描述
右键User’s Desktop下的主输出快捷方式–>选择属性窗口

在这里插入图片描述
选中刚刚添加的图标文件就行了

6. 添加卸载程序

右击Application Folder —> Add —> 文件 —>把C:\Windows\System32下的msiexec.exe文件添加到Application Folder中,创建快捷方式,并重命名为UninstallCompareTool,然后移动到User’s Programs Menu里面

在这里插入图片描述
在这里插入图片描述
点击刚刚新建的Setup项目,复制ProductCode 属性的值
在这里插入图片描述

点击刚刚创建的卸载程序快捷方式 —> 将复制的ProductCode 的属性值粘贴在Arguments 属性中,然后在最前面加上 /X (PS:/X后有一个空格)
在这里插入图片描述

7. 生成安装项目

右击新建的Setup项目—> 生成

在这里插入图片描述

在新建的Setup项目的目录下即可看到如下文件,debug文件夹,会看到生成了两个文件“XX.exe”和“XX.msi”。其中如果使用exe文件进行安装,则必须要有.msi文件。如果选择.msi文件进行安装,可以不需要exe文件
在这里插入图片描述
双击即可启动安装向导

在这里插入图片描述
一直下一步就可以了

在这里插入图片描述
安装成功~

相关文章:

  • 外包干了25天,技术倒退明显
  • vue element动态添加删除数据div
  • Vue - 你知道Vue中key的工作原理吗
  • opencv如何寻找图片轮廓
  • LeetCode 19.删除链表的倒数第N个结点
  • 《青少年成长管理2024》028 “成长七要素之五:能力”1/5
  • Git - 如何重置或更改 Git SSH 密钥的密码?
  • OpenHarmony实战:CMake方式组织编译的库移植
  • MySQL - MySQL架构设计
  • Linux——用户管理,文件压缩命令
  • 思科数通设备命令大全
  • 1.k8s简介
  • NOI - OpenJudge - 2.5基本算法之搜索 - 1490:A Knight‘s Journey - 超详解析(含AC代码)
  • docker使用arthas基本教程
  • python开发poc2,爆破脚本
  • python3.6+scrapy+mysql 爬虫实战
  • CEF与代理
  • docker容器内的网络抓包
  • es的写入过程
  • in typeof instanceof ===这些运算符有什么作用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • js正则,这点儿就够用了
  • maven工程打包jar以及java jar命令的classpath使用
  • Node + FFmpeg 实现Canvas动画导出视频
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Theano - 导数
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 回顾2016
  • 聚簇索引和非聚簇索引
  • 前端性能优化——回流与重绘
  • 如何实现 font-size 的响应式
  • 算法-图和图算法
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​VRRP 虚拟路由冗余协议(华为)
  • #if和#ifdef区别
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (007)XHTML文档之标题——h1~h6
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (27)4.8 习题课
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (笔试题)合法字符串
  • (二)windows配置JDK环境
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (算法)求1到1亿间的质数或素数
  • (一)80c52学习之旅-起始篇
  • (一一四)第九章编程练习
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)http-server应用
  • (转)Oracle 9i 数据库设计指引全集(1)