.net平台 通过Windows installer 打包和部署实例操作
Windows installer 打包和部署
1.新建项目。
打开VS,新建项目->其他项目类型->安装和部署(Visual Studio Installer)。
注:若VS2013 或者 VS2015 没有打包和部署模块。通过https://marketplace.visualstudio.com/搜索Microsoft Visual Studio 2013 Installer Projects或者Microsoft Visual Studio 2015 Installer Projects 与VS版本对应下载并安装。
2.添加打包项目。
将需要打包的项目添加到该解决方案中。(若不添加,则无法为步骤4添加项目输出)

3.添加打包项目的文件系统。
右键【添加】选择【文件系统】,如下图所示。

将需要打包项目的bin文件拷贝到 Application Folder目录下。

注:bin文件下可能包含文件夹,通过右键Add File过程繁琐,可以直接通过复制将整个目录进行拷贝。
4.添加项目输入。
右键文件夹->Add->项目输出。(注:右键主程序的上级目录的文件夹,而不一定是Application Folder)

5.创建桌面快捷方式。
右键选择该项目的启动程序(或者主输出),选择Create Shortcut to ***。将创建的快捷方式拖至User’s Desktop目录下。

改变快捷方式图标。

6.创建卸载程序。
右键文件夹根目录->Add->File,然后将"C:\Windows\System32" 下面的“msiexec.exe”文件给添加进来。可以再给msiexec.exe创建一个快捷方式命名为”UnInstall.exe“。将安装程序属性中的ProductCode复制给卸载快捷方式(UnInstall.exe)的Arguments属性,需在ProductCode的值前插入”/X ”。(X之后有空格) 卸载程序图标设置与上面相同。

7.添加注册表信息。

在HKEY_CLASSES_ROOT目录下依次创建”项目名”->”Shell”->”Open”->”command”四层目录关系,如下图所示。右键command->New->字符串值。将新建的字符串值的Name清空(还原为default值,可覆盖注册表中的默认值),将Value值设置为”[TARGETDIR]\+文件夹名称+启动项名称”+空格+”%1”。”%1”为参数,可以为其他值。例如该用例Value值为”[TARGETDIR]\MaWanClient\MaWanClient.exe” “%1”。(注:[TARGETDIR]为大写)

8.其他注意事项。
(1)注册表卸载时自动删除。右键选择在【HKEY_CLASSES_ROOT】目录下创建的文件->【属性窗口】,将DeleteAtUninstall属性改为True。

(2)X86与X64兼容性问题。打包过程中可能遇到待打包项目与打包程序执行平台不一致问题,可以将解决方案【属性】中的活动配置改为”Debug|Any CPU”

(3)HTML调用测试。HTML代码如下:
<html>
<head></head>
<body>
<a href="MaWanClient:0">启动</a>
</body>
</html>
MaWanClient 与注册表中的根目录名称一致,”0”为传入参数。通过注册表的信息即可调用系统中的安装完成的软件。
(4)打包程序信息设置。选择安装程序属性即可修改相关的作者、产品名称、版本号等相关信息。

.net平台 通过Windows installer 打包和部署实例操作的更多相关文章
- 安全模式下卸载windows installer打包的软件(转)
安全模式下卸载windows installer打包的软件 起因: 主机系统MAC,虚拟软件Parallels Desktop, 虚拟系统 Win 7. 今天在虚拟机WIN7里面安装了某个软件导致重启 ...
- Winform程序部署方式总结二——Windows Installer发布
针对Winform程序,介绍两种常用打包方式:ClickOnce和Windows Installer 应用程序如下: 二.Windows Installer发布 1.新建项目 创建后视图 第一步: 应 ...
- SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...
- springboot测试、打包、部署
本文使用<springboot集成mybatis(一)>项目,依次介绍springboot测试.打包.部署. 大多数朋友是做后端的,也就是为其他系统或者前端UI提供Rest API服务. ...
- 机房收费系统vb.net之打包与部署(二)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangdan199112/article/details/28286365 ...
- flask在windows上用mod_wsgi部署
flask在windows上用mod_wsgi部署也是折腾了不少时间,下面就总结下. 首先下载Apache httpd,我认为Apache Hans比较好: 一般这种情况下,你的python环境已经安 ...
- 【工具】清理Windows Installer冗余文件(支持64位NT6.x系统)
样子: 支持系统: Windows NT 5.x/6.x 32及64位所有系统.需.net framework 2.0运行环境 功能: 清理上述系统中冗余的Windows Installer补丁文件. ...
- (转)使用 Advanced Installer 打包 一键安装Web应用程序
使用 Advanced Installer 打包 一键安装Web应用程序 安装预览: 资源下载: 示例安装包 操作流程: 1.新建Asp.net Application. 2.设置 ...
- Visual Studio Installer打包后生成的安装文件每次执行都需要重新安装C++ 2010运行库(x86)的解决方案
原文:Visual Studio Installer打包后生成的安装文件每次执行都需要重新安装C++ 2010运行库(x86)的解决方案 如果你是用Visual Studio自带的打包项目打包了一个I ...
随机推荐
- 面向初学者的指南:创建时间序列预测 (使用Python)
https://blog.csdn.net/orDream/article/details/100013682 上面这一篇是对 https://www.analyticsvidhya.com/blog ...
- kuangbin专题专题十一 网络流 Going Home POJ - 2195
题目链接:https://vjudge.net/problem/POJ-2195 思路:曼哈顿距离来求每个人到每个房间的距离,把距离当作费用. 就可以用最小费用最大流来解决了,把每个房子拆成两个点,限 ...
- windows丢失文件的恢复技巧
这几天在使用STVD调试程序的时候,突然跳出来一个“共享冲突”错误,当时并没有在意,点确定后赶紧CTRL+S,然后就一直死在那里了... 结束任务,重启STVD,提示找不到main.c,到此也不以为然 ...
- Kubernetes-Service资源详解
service的三种工作模式:(userstats(效率低).iptables.ipvs) service可以自动实现负载均衡.service自动实现了负载均衡,service通过selector标签 ...
- NOIP2018PJ游记
\(NOIP2018\)普及AFO记 178pt,2=,in ZJ_Hangzhou_学军中学 \(Day\) \(0\) 中午就请假回家打模板了 \(Day\) \(1\) \(A.M.8-12\) ...
- demon病毒样本分析
1. 简介 该样本是前几周爆发的THINKPHP漏洞中,被批量上传的一个病毒样本.如图所示. 2. 分析 该样本未经混淆,加壳,所以直接拖到IDA中即可分析. 首先从main函数开始.做一些初始化的函 ...
- 《ASP.NET Core 高性能系列》静态文件中间件
一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...
- Vue methods,watch,computed的区别
1. computed(计算属性) 计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算.注意,如果某个依赖 (比如非响应式属性) 在该实例范畴之外,则计算属性是不会被更新的. eg: < ...
- C语言宏的神奇写法:语句块作为参数,算半个函数式编程?
我想要写几个循环做测试代码,每次都写 `for(size_t i = 0; i < n; i++)` 很烦人,然后就灵机一动,能不能用宏实现,然后就写出了: #define repeat(n, ...
- LeetCode 127. Word Ladder 单词接龙(C++/Java)
题目: Given two words (beginWord and endWord), and a dictionary's word list, find the length of shorte ...