日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)...

發布時間:2023/12/20 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#進階系列——使用Advanced Installer制作IIS安裝包(二:配置安裝包依賴項和自定義dll) 原文:C#進階系列——使用Advanced Installer制作IIS安裝包(二:配置安裝包依賴項和自定義dll)

前言:上篇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菜單

選擇需要包含的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.寫xmlvar 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/

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

posted on 2017-02-07 10:07 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/6372787.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。