1.安装打包插件:Microsoft Visual Studio 2017安装程序项目

​

2.联机查找下面的组件,然后安装,重启VS,进行插件安装

3.新建安装项目,另外,有些人可能会想这么多安装类型,怎么选。因为我们这里说的Windows程序打包,输出想要.exe状语从句:.msi,大概看一下介绍就能知道,第一个和第四个是合适的。这两个又该怎么选呢?那其实第四个就是对一些属性多了些引导,最终的项目结构和第一个是没有区别的,这里我们就选第一个

​

4.新建完成后,如下图

​

5.选中项目安装文件,打开属性窗口

​

6.在属性窗口进行安装项目设置,在这里对主要的设置进行说明

  • 重要属性
    1. Author和Manufacturer,分别是作者和制造商的意思,一般都写公司名。
    2. ProductName,软件名。默认是项目名,影响到安装界面和安装目录。务必改掉。
    3. Version,版本号,影响安装流程,后面会说。
    4. TargetPlatform,意思很明显,表现层面上就是,你决定的安装目录的英文在Program Files还是Program Files (x86),根据项目决定。
    5. RemovePreviousVersion,是否移除之前的版本。务必改为真,不然你更新几次软件就会发现,电脑里多个版本都在安装着。
  • 不重要的属性:
    1. InstallAllUsers,用户权限默认值。这个在安装界面还可以重新设置。
    2. ManufacturerUrl,公司官网。
    3. SupportUrl,, SupportPhone技术支持的网址和电话。
    4. Description,软件描述。
    5. Title,无用。一开始我以为它是安装界面的标题,但其实并不是,这个值默认和项目名一致,但你修改之后,在哪里也都看不到。所以无用

7.在文件系统页面可以看到三个入口(文件夹)

  • Application Folder,这个是你的应用安装之后,文件所处的目录。
  • User's Desktop,用户桌面,我们等下会需要在这里面放置一个快捷方式。
  • User's Programs Menu,用户的程序菜单。就是按的Windows徽标键或者是屏幕左下角的的Windows徽标,会出现的一些文件夹和快捷方式

8.在当前界面添加文件夹,用来保存额外的一些的东西,包括图标文件和卸载.exe

​

​

9.将事先做好的图标文件(包括安装图标和卸载图标,用户也可以用同一个图标)和卸载.exe(在电脑中C:\ Windows \ System32 \ msiexec.exe)拷贝到文件夹下,如下图

​

10.准备工作做好后,下面我们设置应用程序文件夹设置

​

​
​

11.添加完成输出文件后,现在可以为输出文件设置快捷方式

​

​

​

​

​

12.将设置好的快捷方式,拖拽到用户的桌面,如下图

​

13.在用户程序菜单文件夹下,新建文件夹

​

​

​

​

​

14.在新建的文件夹中将打开的快捷方式设置完成后,下面设置程序卸载的快捷方式,进入之前的

​

​

15.卸载程序需要程序的产品ID,产品ID,从哪里来,如下图

​

​

将Arguments属性值为:/ x {CF35A1D9-CE63-41CA-B220-DB542D6623D6}(即本安装软件的ID),这就OK了,可以卸载软件了,将设置好的快捷方式拖拽到之前新建的文件夹内

​

16.对安装项目生成,在dubug目录下就能够看到安装文件了,就可以进行安装了

​

以下是扩展,配置安装程序的Net Freamkwork版本和系统组件安装的来源

​

​

选择“我的应用程序相同的位置下载系统必备组件”生成后报错

错误:要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.6.1(x86和x64)”项的文件“ DotNetFX461 \ NDP461-KB3102436-x86-x64-AllOS-ENU.exe“下载到本地计算机。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。
错误:要在”系统必备“对话框中启用”从与我的应用程序相同的位置下载系统必备组件“,必须将”Microsoft .NET Framework 4.6.1(x86和x64)“项的文件”DotNetFX461 \ NDP461-KB3102436- x86-x64-AllOS-ENU.exe“下载到本地计算机。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。
错误:要在”系统必备“对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.6.1(x86和x64)”项的文件“DotNetFX461 \ NDP461-KB3102436-x86-x64-AllOS- CHS.exe程序”下载到本地计算机。有关详细信 息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。
错误:要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.6.1(x86和x64)”项的文件“ DotNetFX461 \ NDP461-KB3102436-x86-x64-AllOS-CHS.exe“下载到本地计算机。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。
错误:要在”系统必备“对话框中启用”从与我的应用程序相同的位置下载系统必备组件“,必须将”Microsoft .NET Framework 4.6.1(x86和x64)“项的文件”DotNetFX461 \ NDP461-KB3102436- x86-x64-AllOS-CHS.exe“下载到本地计算机。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。
错误:要在”系统必备“对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.6.1(x86和x64)”项的文件“DotNetFX461 \ NDP461-KB3102436-x86-x64-AllOS- CHS.EXE”下载到本地计算机。有关详细信 息,请参见http://go.microsoft.com/fwlink/?LinkId=616018。

解决方案,可以也。参考  https://docs.microsoft.com/zh-cn/visualstudio/deployment/how-to-include-prerequisites-with-a-clickonce-application?view=vs-2015

安装文件下载地址

http://puresoftapps.blogspot.com/p/microsoft-net-framework-461-language.html

https://www.microsoft.com/en-us/download/confirmation.aspx?id=49982

1.打开文件路径C:\ Program Files(x86)\ Microsoft SDKs \ ClickOnce Bootstrapper \ Packages \

2,打开相应的文件夹(我选择的是DotNetFX461),将下载好的文件拷贝进来

3.将NDP461-KB3102436 86 x64的ALLOS-CHS.EXE文件复制到ZH-hans文件夹下然后你就可以发布了

注意:应用程序文件夹设置项目输出的方式,总是会出现打包后的程序无法运行的结果,主要是设置时缺少部分文件的原因,我们可以通过将需要打包整个程序的发布文件或者调试等能够运行的文件全部拷贝到应用程序文件夹中

VS2017 打包(详细)的更多相关文章

  1. vs2017打包安卓项目简述

    1.使用vs2017创建安卓项目 2.选择Release模式编译项目 3.项目存档 4.签名分发 存档完成后,点击分发按钮进入如下界面 按要求输入签名信息 选择apk保存位置 5.分享apk文件 参考 ...

  2. Realm_King 之 .NET 打包详细教程(B)

    上篇(Realm_King 之 .NET 打包详细教程(A))给大家讲述了打包基本的操作,接下来帮助大家如何覆盖安装,希望大家仔细阅读... (一)看到你的解决方案,选中你的安装程序,点击F4会弹出改 ...

  3. VS2017打包注册IE插件及修改IE安全选项设置

    前言 最近项目需要在浏览器环境下读取员工身份证信息,要实现网页与硬件设备通信,考虑了几种实现方式: 1.借助ActiveX插件,通过程序库直接与设备通信. 优点:厂家提供了IE插件,开发简单 缺点:只 ...

  4. VS2017打包C#桌面应用

    原文地址:https://blog.csdn.net/houheshuai/article/details/78518097 在要打包项目的解决方案 右键→添加→ 新建项目 后出现如下选择 如果没有V ...

  5. VS2017打包设置

    本文为网络贴文,引用于:http://www.cnblogs.com/overstep/p/6942423.html 一.  安装打包插件: 安装打包插件:Microsoft Visual Studi ...

  6. Webpack安装配置及打包详细过程

    引言 前端经过漫长的发展,涌现出了很多实践方法来处理复杂的工作流程,让开发变得更加简便,其中,模块化可以使复杂的程序细化成为各个小的文件,而webpack并不强制你使用某种模块化方案,而是通过兼容所有 ...

  7. VS2017打包注册IE插件及修改IE安全选项设置【转】

    前言 最近项目需要在浏览器环境下读取员工身份证信息,要实现网页与硬件设备通信,考虑了几种实现方式: 1.借助ActiveX插件,通过程序库直接与设备通信. 优点:厂家提供了IE插件,开发简单 缺点:只 ...

  8. VS2017打包

    转载:https://blog.csdn.net/Houheshuai/article/details/78518097 在要打包项目的解决方案 右键→添加→ 新建项目 ​ 后出现如下选择 ​ 如果没 ...

  9. VS2017 打包成exe

    在项目的解决方案 右键→ 新建项目  后出现如下选择 (如果没有找到,请在联机中搜索  visual studio installer 并安装) 选择项目类型 Setup Project,并输入名称, ...

随机推荐

  1. JS对象 屏幕分辨率的高和宽 window.screen 对象包含有关用户屏幕的信息。 1. screen.height 返回屏幕分辨率的高 2. screen.width 返回屏幕分辨率的宽

    屏幕分辨率的高和宽 window.screen 对象包含有关用户屏幕的信息. 1. screen.height 返回屏幕分辨率的高 2. screen.width 返回屏幕分辨率的宽 注意: 1.单位 ...

  2. Codeforces 1166F 并查集 启发式合并

    题意:给你一张无向图,无向图中每条边有颜色.有两种操作,一种是询问从x到y是否有双彩虹路,一种是在x到y之间添加一条颜色为z的边.双彩虹路是指:如果给这条路径的点编号,那么第i个点和第i - 1个点相 ...

  3. QMap的key也可以是一个结构体类吗?

    QMap<usbsnvidpid, QVector<QString>> USBVIDPIDTIME; USBVIDPIDTIME.insert(m_vidpidsn, time ...

  4. position: absolute 如果不设置left, right, top, bottom会在什么位置

    一般我们设置position: absolute都会一起设置left/right/top/bottom, 但是如果不设置, 布局会是什么样子的呢? 直接上图 1.一个大盒子中4个小盒子, 正常文档流布 ...

  5. 项目实战 - 混合式App开发

    为何要使用混合式开发? 要说为什么使用Hybrid App [混合式开发],就要先了解什么是Native App[原生程序], Web App[网站程序]. Native App 是专门针对某一类移动 ...

  6. poj 3744 矩阵快速幂+概率dp

    题目大意: 输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10).再输入p,代表这位童子兵非常好玩,走路一蹦一跳的.每次他在 i 位置有 p 的概率走一步到 i ...

  7. HDU 6326 Problem H Monster Hunter

    \(\mathtt{Problem H}\) \(\mathtt{Monster}\) \(\mathtt{Hunter}\) \(\mathcal{Description}\) 题目 给定一棵 \( ...

  8. ansible如何用root用户运行普通用户授权

    ansible默认以root用户进行授权,但是需要用普通用户执行一些命令操作: 如: 1. ansible 10.0.0.1 -m raw -a "date" -u www 但是会 ...

  9. Robot Framework:数据库操作

    robotframework 操作数据库,需要安装DatabaseLibrary库 pip install robotframework-databaselibrary Python操作不同的数据库, ...

  10. FFT快速傅里叶模板

    FFT快速傅里叶模板…… /* use way: assign : h(x) = f(x) * g(x) f(x):len1 g(x):len2 1. len = 1; while(len < ...