1. 程式人生 > >使用Advanced Installer製作IIS安裝包(二:配置安裝包依賴項和自定義dll)

使用Advanced Installer製作IIS安裝包(二:配置安裝包依賴項和自定義dll)

前言:上篇使用Advanced Installer製作IIS安裝包(一:配置IIS和Web.config)介紹了下使用Advanced Installer配置IIS和Web.config的過程,操作起來是相對比較簡單的,只要知道了博主提供的方法,相信都不是問題,其實博主當初尋找相關方法配置IIS和Web.config的時候也是費了九牛二虎之力的,畢竟資料太少,只能各種方式挨個嘗試一遍,解決問題之後回過頭來看,發現當初也是走了很多的彎路。比如今天要介紹的這個自定義dll的功能。

關於安裝包的製作,可能有人覺得沒啥叼用,直接將釋出的檔案拷貝過去,然後再IIS上面新建站點,配置一下相關的選項就行了唄,哪至於像你說的這麼複雜!確實,直接配置沒有任何問題,但當你的產品做大了之後,總不能每一次部署都遠端到客戶的伺服器上面操作一番吧,並且很多客戶是不願意讓你去登陸他的伺服器的,這種情況下直接丟一個exe給別人安裝是不是更加方便呢?退一步說,哪怕是為了讓我們的系統看上去高大上也行嘛~~

一、配置安裝包依賴項

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安裝包的製作暫且告一段落,希望對大家有幫助。

如果你覺得本文能夠幫助你,可以右邊隨意 打賞 博主,也可以 推薦 進行精神鼓勵。你的支援是博主繼續堅持的不懈動力。

歡迎各位轉載,但是未經作者本人同意,轉載文章之後必須在文章頁面明顯位置給出作者和原文連線,否則保留追究法律責任的權利

相關推薦

使用Advanced Installer製作IIS安裝配置安裝依賴定義dll

前言:上篇使用Advanced Installer製作IIS安裝包(一:配置IIS和Web.config)介紹了下使用Advanced Installer配置IIS和Web.config的過程,操作起來是相對比較簡單的,只要知道了博主提供的方法,相信都不是問題,其實博主當初尋找相關方法配置IIS和Web.co

如何優雅使用Sublime Text3Sublime設置豆沙綠背景色定義主題

下載地址 文件夾 uri 文本 一個 16進制 sdn 命名 tor ?Sublime Text3軟件的下載 ?設置字體的大小 ?設置背景色和關鍵字顏色(Color Scheme 生成器) ?快速生成html頭文件 1.Sublime Text3軟件的下載地址和包含的文件:

使用Advanced Installer製作IIS安裝配置IISWeb.config

前言:大過年的,寫篇文章不容易,還是給自己點個贊~~年前找了下.net安裝包的製作方法,發現Visual Studio自帶的製作工具使用起來非常麻煩,需要單獨下載安裝包,並且什麼啟用認證等等屁事相當麻煩,最坑爹的是它的自定義dialog使用起來有很多的侷限性,所以找了很久,終於找到了Advanced Inst

公司軟體安裝流程IDEA破解及配置

一:下載並安裝IDEA: 官網:https://www.jetbrains.com/idea/ 二:下載破解包: 連結:https://pan.baidu.com/s/1xRDckFVQ7pnSLzQ2W-e3Pg  提取碼:vb1f  三:破解流程: 將下載

介面自動化落地HttpClient+testNG實現對介面的測試及校驗

這是之前login介面的程式碼 @Test(groups = "loginTrue",description = "使用者登入介面測試") public void loginTrue() throws IOException { S

Oracle異常處理及舉例Oracle預定義異常定義異常

PL/SQL 異常處理 Oracle系統異常分別為兩大類: 預定義異常:Oracle系統自身提供 自定義異常:Oracle不知曉無法控制的異常,特定的業務邏輯。由使用者在程式中定義,Oracle自動引發Oracle常見的預定義異常 ZERO_DIVIDE

phpcms手機門戶開實現繫結任意欄目定義模板

用phpcms的自帶的手機站模組開發手機站,你可能碰到這樣那樣的問題,比如一下: (1)phpcms手機站無法繫結單頁面 (2)seo無法呼叫關鍵詞或者網站欄目 (3)繫結欄目雖然有排序卻不起作用 (4)如果只繫結父欄目卻無法呼叫列表,還得必須繫結子欄目 (5)欄目

如何優雅使用Sublime Text3Sublime設定豆沙綠背景色定義主題

♣Sublime Text3軟體的下載♣設定字型的大小♣設定背景色和關鍵字顏色(Color Scheme 生成器)♣快速生成html標頭檔案:http://download.csdn.net/detail/sinat_31719925/9684613Sublime Text

關於使用count(X) 函式的說明附加關於null的說明以及0的區別

關於使用count(X) 函式的說明 count(X) 函式用於計算一個查詢所返回的行數,但是和其他的聚合函式AVG(X), SUM(X), MAX(X), MIN(X)一樣,它在統計的時候都會簡單的忽略含有空記錄的查詢,即count(X)中的表示式X的值為null時,co

WebSphere V8.5 靜默安裝升級-使用響應文件靜默安裝軟件生成相應文件,不安裝以及managesdk管理SDK

cep 檢查 linu 要點 pps erb platform uri 命令 使用響應文件靜默安裝軟件包(生成相應文件,不安裝):./IBMIM -record /response_files/install_product.xml -skipInstall skipIns

advanced installer 製作exe安裝程式

其他的和製作msi工程一樣.而後在媒介項中的載入程式欄中選中"建立exe安裝程式",並選中"程式包"->exe檔案中包含安裝檔案->msi包含在載入程式中.並把安裝選項的提取位置全部刪除.(555,以前就是這裡沒刪除,導致安裝檔案失敗)並在媒介欄->檔案中選擇使用lzma

IIS允許下載APK安裝MIME型別配置

.apk檔案就是安卓(Android)的應用程式字尾名,預設情況下,使用IIS作為Web伺服器的無法下載此檔案。如果需要下載此檔案則需要對IIS的MIME型別進行配置。IIS6.0  MIME配置過程:開啟IIS服務管理器,找到伺服器,右鍵-屬性,開啟IIS服務屬性;單擊MI

Centos 7.0 編譯安裝LAMPLinxu+apache+mysql+php之源碼安裝Mysql

php mysql apache mysql 簡介: MySQL是一個關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,這樣就增加了速度並提高了靈活性。目前其屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RD

手動安裝編譯bind進制壓縮

bind named首先在www.isc.org網站中下載bind的源碼包。 這裏用可視化界面的firefox直接下載find / -name "bind-*"查找到下載後路徑。tar -xf /PATH/TO/BIND,解壓到當前目錄中。前提是已經安裝了Desktop Platform Developmen

jenkins實戰之jenkins安裝部署

自動化運維 上一小節介紹了Jenkins安裝(Linux/uninx平臺),這節我們講講Jenkins界面操作(包括系統設置,工具安裝,插件管理,系統升級,安全設置等等操作); 登錄jenkins首頁,分別有以下選項欄,從左側看起,點擊Jenkins系統管理我們會看到右側list欄,內

3、netty粘、拆

list ride int 簡化 iter getclass null message som 上篇博客留了個尾巴“而且LineBasedFrameDecoder據說還有一種不要求攜帶結束符的解碼方式”,今天就從源碼來看看是怎麽回事。 一、基本原理 如果沒有netty,

linux下安裝vsftp

restart put pass con system 關閉 set acc cannot 安裝vsftpd 1、以管理員(root)身份執行以下命令 yum install vsftpd 2、設置開機啟動vsftpd ftp服務 chkconfig vsftpd

Centos7 zabbix3.4.6的安裝部署

pos gpo 監控服務器 技術分享 color conf blog sys nbsp 接著安裝zabbix客戶端 直接安裝在服務器上 監控服務器 ip 192.168.161.25 yum -y install zabbix-agent #通過Yum安裝zabbix

R語言中常用

json數據格式 預測 數據 環境 地圖 spec pdf 大氣 source 數據導入 以下R包主要用於數據導入和保存數據feather:一種快速,輕量級的文件格式。在R和python上都可使用readr:實現表格數據的快速導入。中文介紹可參考這裏readxl:讀取Mic