使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

摘要:
此外,AdvancedInstaller还支持在安装期间检测计算机上的浏览器版本、sqlserver数据库版本、IIS版本和其他选项。让我们添加一个预定义的Mes.Installer.dll,然后查看该dll中的代码。我们发现AdvancedInstaller中有一个IntelerClassParameters,我们创建了一个新参数。例如,[EDIT_1_PROP_1]表示AdvancedInstaller中文本框的属性,dataSource对应于C#中的参数。

阅读目录

正文

前言:上篇使用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菜单

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第1张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第2张

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

除了支持包含framework以外,Advanced Installer还支持允许安装软件检测系统的版本,比如:

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第3张

这里勾选的系统版本即为安装必须的系统版本,这个很简单,有兴趣的可以试试。

除此之外,Advanced Installer还支持安装的时候检测机器上面的浏览器版本、sql  server数据库版本、IIS版本等选项。如果当前安装机器上面的版本低于要求的配置,就会提示错误。

回到顶部
二、自定义dll(测试数据库连接)

关于自定义dll这个,博主曾经尝试过很长时间,发现里面有几个坑。且听博主慢慢道来。

下面博主就以配置Web.config里面的连接字符串为例来说明安装过程中自定义dll的使用。比如,我们拖出如下界面:

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第4张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第5张

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

首先在VS里面新建一个类库项目Mes.Installer,然后新建一个安装程序类

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第6张

继承System.Configuration.Install.Installer类,重写Install()方法。

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第7张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第8张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第9张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第10张

有了这个作为基础,我们就可以来看看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也是一样啊。比如

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第13张

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

关于数据库的配置,还有一点是值得一提的,那就是我们的Advanced Installer支持在安装的过程中测试数据库连接。还是在dialog里面Add dialog...,

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第14张

确定之后如下

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第15张

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

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)第16张

以上是针对sql server的,对于oracle数据库的测试链接,就略显复杂,需要配置ODBC相关的选项。暂且不展开说了,看看园友们对这块有没有需求。

 

免责声明:文章转载自《使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS 特定于设备的开发:使用加速器启动屏幕上的对象UpdatePanel控件使用详解(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Redis布隆过滤器

一、布隆过滤器使用场景 比如有如下几个需求: ①、原本有10亿个号码,现在又来了10万个号码,要快速准确判断这10万个号码是否在10亿个号码库中? 解决办法一:将10亿个号码存入数据库中,进行数据库查询,准确性有了,但是速度会比较慢。 解决办法二:将10亿号码放入内存中,比如Redis缓存中,这里我们算一下占用内存大小:10亿*8字节=8GB,通过内存查询...

openssh安装/更新教程(CentOS)

由于rpm包版本总落后于tar包,对于想安装新版本或由于漏洞需要更新到新版本那只能选择源代方式编译安装。 更新执行和安装一样的步骤就行了。 1.下载 官方网址:http://www.openssh.com/ 在页面左侧选择操作系统进入,Linux对应页面为:http://www.openssh.com/portable.html 选择一个镜像站点进入下载,...

vim 插件 入门

vim 手册 vimtutor 精简版本 help user-manual 详细手册 一些vim自带设置 直接在~/.vimrc文件上写上如下配置即可 set nu "显示行号 set cursorline "高亮显示当前行 set cursorcolumn "高亮显示当前列 set hlsearch "高亮显示搜索结果 " 自适应不同语言的智能缩进...

《Linux内核Makefile分析》之 auto.conf, auto.conf.cmd, autoconf.h【转】

转自:http://blog.sina.com.cn/s/blog_87c063060101l25y.html 转载:http://blog.csdn.net/lcw_202/article/details/6661364 在编译构建性目标时(如 make vmlinux),顶层 Makefile 的 $(dot-config) 变量值为 1 。 在顶层...

xadmin安装2

Django-xadmin的介绍 > `Django`是`python`的重量级web框架,写得少,做得多,非常适合后端开发,它很大的一个亮点是,自带后台管理模块,但它自带的后台管理有点丑,而`Xadmin`是基于`bootstrap`开发的一套后台管理框架,界面非常美观,只需几步就可以替换自带的`Django_admin` 具体的安装步骤 1. x...

五、nginx的安装部署

nginx的安装部署及升级nginx的官网:http://nginx.org 先来看下nginx最新的版本信息 nginx最新的主流版本(mainline version):1.19.2 nginx稳定版本(stable version):1.18.0 其它稳定版本(legacy versions) 一、实验环境 [root@inode1 ~]# una...