C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起来是相对比较简单的,只要知道了博主提供的方法,相信都不是问题,其实博主当初寻找相关方法配置IIS和Web.config的时候也是费了九牛二虎之力的,毕竟资料太少,只能各种方式挨个尝试一遍,解决问题之后回过头来看,发现当初也是走了很多的弯路。比如今天要介绍的这个自定义dll的功能。
关于安装包的制作,可能有人觉得没啥叼用,直接将发布的文件拷贝过去,然后再IIS上面新建站点,配置一下相关的选项就行了呗,哪至于像你说的这么复杂!确实,直接配置没有任何问题,但当你的产品做大了之后,总不能每一次部署都远程到客户的服务器上面操作一番吧,并且很多客户是不愿意让你去登陆他的服务器的,这种情况下直接丢一个exe给别人安装是不是更加方便呢?退一步说,哪怕是为了让我们的系统看上去高大上也行嘛~~
本文原创地址:http://www.cnblogs.com/landeanfen/p/6369192.html
一、配置安装包依赖项
Advanced Installer支持直接在安装包中包含.net Framework,这样在安装软件的时候会检测你的PC上面是否安装了对应的framework的版本,如果没有,则会自动给你安装Framework。并且支持离线和在线两种方式的安装。
进入到Prerequisites菜单

选择需要包含的framework的版本,比如博主这里选择4.6.1,支持在线和离线两种方式。如果你选择离线,需要先将framework 4.6.1的安装包下载到本地,然后包含进来;如果是在线安装,则需要提供framework 4.6.1的在线下载地址。比如如果是在线安装,添加成功之后会是这样:

需要说明的是,如果是离线安装,那我们生成的安装包里面会包含framework的安装包,那么势必会导致安装包过大(比如博主这里包含之后差不多有100M左右);如果是在线安装,必须保证安装环境能够连接互联网。所以,具体选择哪种方式可以根据实际情况来决定。
除了支持包含framework以外,Advanced Installer还支持允许安装软件检测系统的版本,比如:

这里勾选的系统版本即为安装必须的系统版本,这个很简单,有兴趣的可以试试。
除此之外,Advanced Installer还支持安装的时候检测机器上面的浏览器版本、sql server数据库版本、IIS版本等选项。如果当前安装机器上面的版本低于要求的配置,就会提示错误。
二、自定义dll(测试数据库连接)
关于自定义dll这个,博主曾经尝试过很长时间,发现里面有几个坑。且听博主慢慢道来。
下面博主就以配置Web.config里面的连接字符串为例来说明安装过程中自定义dll的使用。比如,我们拖出如下界面:

然后四个文本框的属性名分别为EDIT_1_PROP_1、EDIT_2_PROP_1、EDIT_3_PROP_1、EDIT_4_PROP,为了简便,这里就不改这个名称了。然后我们是希望在安装过程中,将用户填写的文本框的值写入到Web.config的Connectionstring里面。然后我们找到自定义操作

我们新建一个.net操作类,它会提示你使用哪个dll。我们先将预先定义好的一个Mes.Installer.dll添加进来,然后来看这个dll里面的代码。
首先在VS里面新建一个类库项目Mes.Installer,然后新建一个安装程序类

继承System.Configuration.Install.Installer类,重写Install()方法。
在介绍Install()方法的实现之前,还需要说明一下Advanced Installer里面的变量的值如何传到我们的C#程序里面来,上篇我们说过,Advanced Installer里面使用[]来定义变量,那么这个变量如何传入C#程序呢?我们找到Advanced Installer里面有一个Intaller Class Parameters(安装类参数)

我们新建一个参数,比如:

[EDIT_1_PROP_1]表示Adavanced Installer里面的文本框的属性,dataSource就对应C#里面参数。我们用同样的方法定义另外几个参数:

注意,如果要在C#里面读取安装文件的根目录,需要这么定义变量

有了这个作为基础,我们就可以来看看Install()方法了
public override void Install(IDictionary stateSaver)
{
var path = Context.Parameters["target"].ToString();
if (!Directory.Exists(path))
{
base.Install(stateSaver);
return;
}
//1.得到配置文件的物理路径
var configPath = path + "Web.config"; //2.取参数
var dataBaseType = Context.Parameters["dataBaseType"].ToString();
var dataSource = Context.Parameters["dataSource"].ToString();
var server = Context.Parameters["server"].ToString();
var userId = Context.Parameters["userId"].ToString();
var password = Context.Parameters["password"].ToString();
//var config = WebConfigurationManager.OpenWebConfiguration(configPath);
//3.写xml
var config = XDocument.Load(configPath);
var connectionStrings = config.Element("configuration").Element("connectionStrings");
string connectionString, providerName; connectionString = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", dataSource, server, userId, password);
providerName = "System.Data.SqlClient"; var adds = connectionStrings.Elements("add");
foreach (var add in adds)
{
if (add.Attribute("name").Value == "Entities")
{
add.Attribute("connectionString").Value = connectionString;
add.Attribute("providerName").Value = providerName;
break;
}
}
config.Save(configPath); //4.调用父类的Install()方法
base.Install(stateSaver);
}
注意这里有一个坑:之前按照园子里的一篇文章来操作,将 base.Install(stateSaver); 这一句放在Install()方法的最前面,最后发现安装的时候怎么都执行不了自己写的代码,就为这博主折腾了很久。
如果你看过博主上篇文章,你可能会疑惑,如果仅仅是配置连接字符串,直接在Advanced Installer里面通过变量的形式配置xml也是一样啊。比如

这样配置不是更加简单吗?如果你有这样的疑惑,说明你是一个用心的读者,为你点个赞!确实,这样也能解决连接字符串的问题,因为博主的项目里面需要区分sql server数据库和oracle数据库,由于不同的数据库类型在web.config里面的连接字符串的形式不同,所以博主使用了dll的方式来操作。并且,在一些特定的情况下,我们使用dll的方式能够更加方便地和我们的系统打交道,比如我们需要在安装的时候去初始化系统的一些配置,这些时候使用dll的优势就凸显了。
关于数据库的配置,还有一点是值得一提的,那就是我们的Advanced Installer支持在安装的过程中测试数据库连接。还是在dialog里面Add dialog...,

确定之后如下

这样,我们在安装的过程中,组件会自动检测我们系统的sql Server实例,我们输入用户名密码之后,点击“Test Sql Connection”按钮,可以检测是否连接成功。

以上是针对sql server的,对于oracle数据库的测试链接,就略显复杂,需要配置ODBC相关的选项。暂且不展开说了,看看园友们对这块有没有需求。
三、总结
好了,关于IIS安装包的制作暂且告一段落,希望对大家有帮助。
如果你觉得本文能够帮助你,可以右边随意 打赏 博主,也可以 推荐 进行精神鼓励。你的支持是博主继续坚持的不懈动力。
本文原创出处:http://www.cnblogs.com/landeanfen/
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利
C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)的更多相关文章
- C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
前言:大过年的,写篇文章不容易,还是给自己点个赞~~年前找了下.net安装包的制作方法,发现Visual Studio自带的制作工具使用起来非常麻烦,需要单独下载安装包,并且什么激活认证等等屁事相当麻 ...
- 使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起 ...
- 使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
前言:大过年的,写篇文章不容易,还是给自己点个赞~~年前找了下.net安装包的制作方法,发现Visual Studio自带的制作工具使用起来非常麻烦,需要单独下载安装包,并且什么激活认证等等屁事相当麻 ...
- 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解
关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...
- Advanced Installer 制作.NetWeb部署安装包
原文:Advanced Installer 制作.NetWeb部署安装包 因为是.Net的Web应用程序,所以想用Advanced Installer 调用Dll实现安装部署. 因为我需要自己定制参数 ...
- 2018第一发:记一次【Advanced Installer】打包之旅
一.前言 2017年最后几天,你们都高高兴兴的跨年,博主还在加班制作.net安装包.因为年前要出来第一版的安装包,所以博主是加班加点啊.本来想用VS自带的制作工具,不过用过的人都知道,真是非常好(to ...
- Windows Developer Day - MSIX and Advanced Installer
前面一篇我们介绍了 Adaptive Cards 的基础知识,而在 Windows Developer Day 的 Modern Application Experience 环节,还有一个需要划重点 ...
- 使用 advanced installer 为 winform 做自动更新
原文:使用 advanced installer 为 winform 做自动更新 advanced installer 是一款打包程序,基于 windows installer 并扩展了一些功能,比如 ...
- Windows安装包制作指南——Advanced Installer的使用
1. 前言 最近需要制作windows的安装包,据说Advanced Installer比较强大,遂拿它来制作安装包.在网上少量资料以及官网简约文档中摸索前进,总算是制作出可用的安装包,在此记录,仅供 ...
随机推荐
- CodeForces 620E New Year Tree
线段树+位运算 首先对树进行DFS,写出DFS序列,记录下每一个节点控制的区间范围.然后就是区间更新和区间查询了. 某段区间的颜色种类可以用位运算来表示,方便计算. 如果仅有第i种颜色,那么就用十进制 ...
- java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...
- iOS开发——打包静态库与Framework
最近老是需要做接口给别的客户,就顺便把打包的过程也写一下吧! 一.静态库 静态图里面只能是纯文件,里面不能再有第三方打包的静态库,也就是说,静态库不能打包静态库.这个用的比较多,一般自己公司写出来的东 ...
- 苹果应用商店AppStore审核中文指南
目录 1. 条款与条件2. 功能3. 元数据.评级与排名4. 位置5. 推送通知6. 游戏中心7. 广告8. 商标与商业外观9. 媒体内容10. 用户界面11. 购买与货币12. 抓取与聚合13. 设 ...
- 170112、solr从服务器配置整合到项目实战
整合网上资源后 100%可运行的配合步骤,部署在tomcat 为例. 一:下载solr,版本为5.2.1 地址:http://pan.baidu.com/s/1eRAdk3o 解压出来. 1.在解压的 ...
- PHP PSR 代码风格
FIG组织在制定跟PHP相关规范,简称PSR,PSR旨在通过讨论我们代码项目的共同点以找出一个协作编程的方法. 什么是psr0 强调自动加载的方式 下文描述了若要使用一个通用的自动加载器(autolo ...
- mysql 安装错误 解决方法
错误及警告信息:TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_time ...
- Java编译时出现No enclosing instance of type XXX is accessible.
今天在编译Java程序的时候出现以下错误: No enclosing instance of type Main is accessible. Must qualify the allocation ...
- StackExchange.Redis 官方文档(二) Configuration
配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...
- 6.UDP协议
1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. UDP数据报结构: UDP首部格式: ...