本博客讲述如何利用VS2017制作安装包以及相应的卸载程序,并解决过程中可能遇到的问题

一、制作安装程序

1.打开VS2017,新建项目,选择如下图所示程序:

新建成功后,会出现如下图所示目录:

2.添加安装文件的主入口,在Application Folder --> Add --> 项目输出 如下图所示:

在弹出的对话框中,即可选择当前解决方案下的所有程序文件,选择对应的入口程序即可,如下图所示:

3.添加其他程序文件与资源文件

由于选择项目输出后,自动添加进来的文件是该入口程序在项目中引用的文件,其他第三方DLL或者资源文件等没有添加,需要手动添加,直接在Application Folder --> Add --> 文件或者将需要添加的文件复制到目录中即可

4.添加桌面快捷方式

在Application Folder文件夹中,选择刚才添加进来的主输出,右键,出现如下图所示对话框:

选择第一条记录,并将复制出来的记录复制到User's DeskTop文件夹下

5.打开 User's DeskTop文件夹,在刚才复制的文件上右键,选择属性窗口,设置快捷方式的图标,名称等信息,如下图所示:

6.设置菜单栏

用户的菜单栏在“User's Programs Menu”设置,由于一个完整的安装程序会有安装与卸载两个功能,为了保证程序在同一位置显示,因此建议在User's Programs Menu中新建一个文件夹,将安装与卸载程序放在一起,保持美观

按照第四步的操作,创建一个主输出,并复制到User's Programs Menu文件夹中刚才创建的文件夹内

7.按照第6步操作的方式设置文件属性

8.设置系统所需.netFramework的配置

由于Winform程序的运行需要有.netFramework版本的支持,因此对于不符合.netFramework版本的客户端要能版主用户自动安装.netFramework相关版本

在安装程序主目录上右键,选择属性,如下图所示:

点击弹出框中如下图所示按钮:

在弹出的对话框中即可配置需要配套的.netFramework版本,如下图:

9.制作卸载程序

在"C:\WINDOWS\system32"路径下,找到msiexec.exe 添加到应用程序文件夹中,创建快捷方式,并命名"卸载管理系统"或"Uninstall",将起复制到第六步新建的文件夹下

在主程序中找到安装程序的ProductCode,选择安装程序文件,即可直接在属性页看到,如下图所示:

记录下这个ProductCode

在刚才创建的msiexec.exe快捷方式(注意是快捷方式)上进入属性页面,在Arguments选项中 输入/x 及ProductCode; 例如:/x {A29696DC-67CA-3ADE-6965-ACC7D698CB7}

至此,一个程序的安装程序与卸载程序制作过程完毕。

可能遇到的问题

1.重复安装程序,会出现如下图所示提示:

解决方法:之前版本和当前版本的UpgradeCode必须一样,但是ProductCode必须不同,即程序的id一致,版本不一致,才可以。

修改程序的ProductCode,并将安装程序的Version改成更大的版本号,同时更改RemovePreviousVersions为True,问题解决。(注意:在修改ProductCode之后,需要将卸载程序的ProductCode同时修改,否则程序无法卸载)

利用VS2017制作软件安装包与卸载程序的更多相关文章

  1. 使用Qt Installer Framework制作软件安装包

    概述 Qt Installer Framework(缩写QIF)是Qt官方用于生成软件安装包的工具.包括Qt Creator和Qt Installer Framework自身的安装包都是由这个工具制作 ...

  2. 使用Inno Setup 制作软件安装包详细教程(与开发语言无关)

    前言:关于如何制作一个软件安装包的教程,与编程语言无关.以下,请看详情~ 1.下载Inno Setup,下载地址:https://jrsoftware.org/isinfo.php 2.下载最新版本即 ...

  3. Windows下制作软件安装包

    一.下载 首先,下载SetupFactory9.0.3.0Trial(下载链接:https://www.haolizi.net/example/view_65380.html) 下载好会有一个压缩包 ...

  4. vs2017 制作winfrom 安装包!

    https://www.cnblogs.com/GuZhenYin/p/8176981.html 转载 前言 项目中有用到winfrom做配套的打印程序,直接给客户一个debug文件夹,当然不是很好. ...

  5. Inno Step软件安装包制作教程

    Inno setup制作软件安装包教程 1,Inno Setup介绍 Inno Setup 是一个免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows ...

  6. 快速创建软件安装包-ClickOnce

    大家好,我是沙漠尽头的狼. .NET是免费,跨平台,开源,用于构建所有应用的开发人员平台. 今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne. 1. 什么是Click ...

  7. vs2017 rc 离线安装包制作

    vs2017 rc 离线安装包制作 1.下载在线安装包:https://aka.ms/vs/15/release/vs_Enterprise.exe 2.制作离线安装包: vs_Enterprise. ...

  8. installshield制作的安装包卸载时提示重启动的原因以及解决办法

    原文:installshield制作的安装包卸载时提示重启动的原因以及解决办法 有时候卸载installshield制作的安装包程序,卸载完会提示是否重启电脑以完成所有卸载,产生这个提示的常见原因有如 ...

  9. 7z制作自解压安装包

    像7z和winRAR这样的压缩工具都支持制作自解压的文件.所谓自解压的文件就是不需要目标机器上安装解压工具,通过运行压缩包自己即可解压出压缩包中的文件.下面我们就介绍一下如何利用7z的自解压功能制作应 ...

随机推荐

  1. go分库分表 主从分离例子

    网上有很多介绍分库分表的文章,方法很多: 分区表切分 垂直切分 水平切分 区间切分 取模切分 这里不细说 分库分表简单,但后期会带来一系列的难题: 事务 Join 分页 数据库: master和sla ...

  2. java转python代码

    今天发现一个好玩的工具:可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: http://www.antlr3.org/download/antlr-3 ...

  3. Android Studio3.5在编译项目出现连接不上gradle该怎么办?

    ------------恢复内容开始------------ 报错原因: Could not get resource 'https://dl.google.com/dl/android/maven2 ...

  4. 计数,dic的创建方式,求九九乘法表

    s1='char,python,nihao,ni,ni,python's=s1.split(',')print(s1)s2=list()for i in s: if i not in s2: s2.a ...

  5. Springboot项目集成JPush极光推送(Java SDK)

    1.由于项目的需求,需要在Android APP上实现消息推送功能,所以引用了极光推送(官网:https://www.jiguang.cn/, 文档:http://docs.jiguang.cn/) ...

  6. Springboot+JPA下实现简易爬虫:豆瓣电视剧数据

    Springboot+JPA下实现简易爬虫:豆瓣电视剧数据 前言:今天听到产品那边讨论一些需求,好像其中一点是用户要求我们爬虫,在网页上抓取一些数据然后存到我们公司数据库中,众所周知,爬虫的实现对于p ...

  7. MeteoInfoLab脚本示例:Streamline流线图

    绘制Stramline流线图的函数是streamline,需要两个变量(U/V分量或者风向/风速).脚本程序: f = addfile('D:/Temp/GrADS/model.ctl') u = f ...

  8. 【最大匹配+二分答案】HDU 2236 无题II

    题目内容 这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\ ...

  9. 解决python的requests库在使用过代理后出现拒绝连接的问题

    在使用过代理后,调用python的requests库出现拒绝连接的异常 问题 在windows10环境下,在使用代理(VPN)后.如果在python中调用requests库来地址访问时,有时会出现这样 ...

  10. C++ 多线程 std::thread 使用总结

    在C++ 11之前,官方并没有支持线程库.C++ 11通过标准库引入了对 thread 类的支持,大大方便了完成多线程开发的工作. std::thread 构造函数  (1)thread() noex ...