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

使用 Setup Project 打包

一、下载工具

打开VS,【扩展】-【管理扩展】,搜索 Microsoft Visual Studio Installer Projects 安装

二、打包示例
1. 新建项目

在VS里新建项目,项目类型选择选【setup project】,项目取名如:Setup1,默认出现三个文件夹,

Application Folder:应用程序文件所在的文件夹,比如 .exe 之类的就放到这里

User's Desktop:桌面文件,一般放 .exe 文件的快捷方式

User's Programs Menu:应用程序文件夹,一般放 exe 快捷方式、卸载快捷方式等

一般情况下这3个文件夹够用了,有时还需要新建用户私人的应用程序文件夹(roaming %appdata%)

右击【File System on Target Machine】-【add special folder】-【用户的application data 文件夹】

2. 添加程序文件

将带有ico的图标文件和rtf许可文件的程序拖放到【application folder】文件夹,如下,

3. 创建快捷方式

右击exe文件,创建快捷方式,并重命名,如 test.exe,再将该快捷方式拖到【User's Desktop】文件夹

4. 设置任务栏图标

右击上面新建的 test.exe 快捷方式,打开属性窗口,设置应用程序任务栏图标

5. 设置许可证界面

1)在打包项目【Setup1】上右击,选择【view】-【用户界面】,会出现【Install】【Administrative Intall】。

2)选择【许可协议】,如果没有就右击【Start】-【添加对话框】-【许可协议】,将其拖到想要出现的位置,

3)点击【许可协议】,在属性窗口选择license文件(程序文件中的rtf文件)

6. 设置用户私人数据

1)构造一个数据文件,如:

<?xml version="1.0" encoding="utf-8" ?>
<config><config1 time="1"></config1>
</config>

2)在【User's Application Data Folder】新建一个示例文件夹:

将示例文件拖到示例文件夹中。

7. 设置默认安装路径

鼠标左键【Application Folder】,属性窗口设置 DefaultLocation 属性。

8. 设置安装属性

鼠标左键点击项目【Setup1】,注意不是右击,在属性窗口设置各项属性,一般要设置的几个属性如下:

AddRemoveProgramsIcon:控制面添加或删除程序的图标

Author:作者

InstallAllUsers:安装时是否默认选择“所有人”

Localization:安装时显示的语言

Manufacturer:发布者/公司(会显示在控制面板程序说明)

ManufacturerUrl:发布者/公司网站(会显示在控制面板程序说明)

ProductCode:程序唯一识别码(卸载时会用到)

ProductName:程序名称(控制面板卸载界面会看到)

Version:程序版本(只支持3个数,如2.1.3)

9. 添加卸载文件

1)把C盘下的msiexec.exe 文件复制到应用程序目录,一般在 c:\windows\syswow64 路径下,并改名为 uninstall.exe

2)创建uninstall.exe 的快捷方式

3)设置快捷方式的 Arguments 属性,属性值为上面的 ProductCode 属性值,注意 /x 空格

10. 设置卸载保留文件

有时候用户的配置数据,不能随卸载删除,只需要设置对应文件的 Permanent 属性

True表示保留,False表示删除。

http://www.lryc.cn/news/614020.html

相关文章:

  • EI学术会议 | 机械制造、智能控制
  • spaCy study notes[1]
  • 使用Python+selenium实现第一个自动化测试脚本
  • MySQL的触发器:
  • 什么是Serverless(无服务器架构)
  • ORACLE看当前连接数的方法
  • pycharm常见环境配置和快捷键
  • isulad + harbor私有仓库登录
  • 特征值和特征向量的直觉
  • 【大模型】(实践版)Qwen2.5-VL-7B-Instruct模型量化以及运行测试
  • MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的运营策略创新研究
  • k8s调度问题
  • Android 的CameraX的使用(配置,预览,拍照,图像分析,录视频)
  • 自动驾驶数据闭环
  • WiFi 核心概念与实战用例全解
  • Redis基础数据类型
  • 【DFS系列 | 递归】DFS算法入门:递归原理与实现详解
  • 【MySQL】初识索引
  • 优选算法2
  • Redis中String数据结构为什么以长度44为embstr和raw实现的分界线?
  • 【JavaEE】(10) JavaEE 简介
  • 多级缓存架构:新品咖啡上线引发的数据库压力风暴与高并发实战化解方案
  • Spring Boot Redis 缓存完全指南
  • 破解 Django N+1 查询困境:使用 select_related 与 prefetch_related 实践指南
  • sqlite的sql语法与技术架构研究
  • http请求响应
  • npm run 常见脚本
  • token过期为了保证安全,refresh token不过期,那么拿到refresh token就可以获取token,不还是不安全吗
  • C/C++与JavaScript的WebAssembly协作开发指南