<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        

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

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

      關(guān)于安裝包的制作,可能有人覺得沒啥叼用,直接將發(fā)布的文件拷貝過去,然后再IIS上面新建站點(diǎn),配置一下相關(guān)的選項(xiàng)就行了唄,哪至于像你說的這么復(fù)雜!確實(shí),直接配置沒有任何問題,但當(dāng)你的產(chǎn)品做大了之后,總不能每一次部署都遠(yuǎn)程到客戶的服務(wù)器上面操作一番吧,并且很多客戶是不愿意讓你去登陸他的服務(wù)器的,這種情況下直接丟一個(gè)exe給別人安裝是不是更加方便呢?退一步說,哪怕是為了讓我們的系統(tǒng)看上去高大上也行嘛~~

      本文原創(chuàng)地址:http://www.rzrgm.cn/landeanfen/p/6369192.html

      一、配置安裝包依賴項(xiàng)

      Advanced Installer支持直接在安裝包中包含.net Framework,這樣在安裝軟件的時(shí)候會(huì)檢測你的PC上面是否安裝了對應(yīng)的framework的版本,如果沒有,則會(huì)自動(dòng)給你安裝Framework。并且支持離線和在線兩種方式的安裝。

      進(jìn)入到Prerequisites菜單

      選擇需要包含的framework的版本,比如博主這里選擇4.6.1,支持在線和離線兩種方式。如果你選擇離線,需要先將framework 4.6.1的安裝包下載到本地,然后包含進(jìn)來;如果是在線安裝,則需要提供framework 4.6.1的在線下載地址。比如如果是在線安裝,添加成功之后會(huì)是這樣:

      需要說明的是,如果是離線安裝,那我們生成的安裝包里面會(huì)包含framework的安裝包,那么勢必會(huì)導(dǎo)致安裝包過大(比如博主這里包含之后差不多有100M左右);如果是在線安裝,必須保證安裝環(huán)境能夠連接互聯(lián)網(wǎng)。所以,具體選擇哪種方式可以根據(jù)實(shí)際情況來決定。

      除了支持包含framework以外,Advanced Installer還支持允許安裝軟件檢測系統(tǒng)的版本,比如:

      這里勾選的系統(tǒng)版本即為安裝必須的系統(tǒng)版本,這個(gè)很簡單,有興趣的可以試試。

      除此之外,Advanced Installer還支持安裝的時(shí)候檢測機(jī)器上面的瀏覽器版本、sql  server數(shù)據(jù)庫版本、IIS版本等選項(xiàng)。如果當(dāng)前安裝機(jī)器上面的版本低于要求的配置,就會(huì)提示錯(cuò)誤。

      二、自定義dll(測試數(shù)據(jù)庫連接)

      關(guān)于自定義dll這個(gè),博主曾經(jīng)嘗試過很長時(shí)間,發(fā)現(xiàn)里面有幾個(gè)坑。且聽博主慢慢道來。

      下面博主就以配置Web.config里面的連接字符串為例來說明安裝過程中自定義dll的使用。比如,我們拖出如下界面:

      然后四個(gè)文本框的屬性名分別為EDIT_1_PROP_1、EDIT_2_PROP_1、EDIT_3_PROP_1、EDIT_4_PROP,為了簡便,這里就不改這個(gè)名稱了。然后我們是希望在安裝過程中,將用戶填寫的文本框的值寫入到Web.config的Connectionstring里面。然后我們找到自定義操作

      我們新建一個(gè).net操作類,它會(huì)提示你使用哪個(gè)dll。我們先將預(yù)先定義好的一個(gè)Mes.Installer.dll添加進(jìn)來,然后來看這個(gè)dll里面的代碼。

      首先在VS里面新建一個(gè)類庫項(xiàng)目Mes.Installer,然后新建一個(gè)安裝程序類

      繼承System.Configuration.Install.Installer類,重寫Install()方法。

      在介紹Install()方法的實(shí)現(xiàn)之前,還需要說明一下Advanced Installer里面的變量的值如何傳到我們的C#程序里面來,上篇我們說過,Advanced Installer里面使用[]來定義變量,那么這個(gè)變量如何傳入C#程序呢?我們找到Advanced Installer里面有一個(gè)Intaller Class Parameters(安裝類參數(shù))

      我們新建一個(gè)參數(shù),比如:

      [EDIT_1_PROP_1]表示Adavanced Installer里面的文本框的屬性,dataSource就對應(yīng)C#里面參數(shù)。我們用同樣的方法定義另外幾個(gè)參數(shù):

      注意,如果要在C#里面讀取安裝文件的根目錄,需要這么定義變量

      有了這個(gè)作為基礎(chǔ),我們就可以來看看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.取參數(shù)
                  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.調(diào)用父類的Install()方法
                  base.Install(stateSaver);
              }

      注意這里有一個(gè)坑:之前按照園子里的一篇文章來操作,將 base.Install(stateSaver); 這一句放在Install()方法的最前面,最后發(fā)現(xiàn)安裝的時(shí)候怎么都執(zhí)行不了自己寫的代碼,就為這博主折騰了很久。

      如果你看過博主上篇文章,你可能會(huì)疑惑,如果僅僅是配置連接字符串,直接在Advanced Installer里面通過變量的形式配置xml也是一樣啊。比如

      這樣配置不是更加簡單嗎?如果你有這樣的疑惑,說明你是一個(gè)用心的讀者,為你點(diǎn)個(gè)贊!確實(shí),這樣也能解決連接字符串的問題,因?yàn)椴┲鞯捻?xiàng)目里面需要區(qū)分sql server數(shù)據(jù)庫和oracle數(shù)據(jù)庫,由于不同的數(shù)據(jù)庫類型在web.config里面的連接字符串的形式不同,所以博主使用了dll的方式來操作。并且,在一些特定的情況下,我們使用dll的方式能夠更加方便地和我們的系統(tǒng)打交道,比如我們需要在安裝的時(shí)候去初始化系統(tǒng)的一些配置,這些時(shí)候使用dll的優(yōu)勢就凸顯了。

      關(guān)于數(shù)據(jù)庫的配置,還有一點(diǎn)是值得一提的,那就是我們的Advanced Installer支持在安裝的過程中測試數(shù)據(jù)庫連接。還是在dialog里面Add dialog...,

      確定之后如下

      這樣,我們在安裝的過程中,組件會(huì)自動(dòng)檢測我們系統(tǒng)的sql Server實(shí)例,我們輸入用戶名密碼之后,點(diǎn)擊“Test Sql Connection”按鈕,可以檢測是否連接成功。

      以上是針對sql server的,對于oracle數(shù)據(jù)庫的測試鏈接,就略顯復(fù)雜,需要配置ODBC相關(guān)的選項(xiàng)。暫且不展開說了,看看園友們對這塊有沒有需求。

      三、總結(jié)

      好了,關(guān)于IIS安裝包的制作暫且告一段落,希望對大家有幫助。

      如果你覺得本文能夠幫助你,可以右邊隨意 打賞 博主,也可以 推薦 進(jìn)行精神鼓勵(lì)。你的支持是博主繼續(xù)堅(jiān)持的不懈動(dòng)力。

      本文原創(chuàng)出處:http://www.rzrgm.cn/landeanfen/

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

      posted @ 2017-02-06 17:08  懶得安分  閱讀(6518)  評論(15)    收藏  舉報(bào)
      主站蜘蛛池模板: 在线免费播放av日韩| 国产福利片一区二区三区| 国产精品福利自产拍在线观看 | 国内精品人妻一区二区三区| 国产欧洲欧洲久美女久久| 色噜噜噜亚洲男人的天堂| 久久综合老鸭窝色综合久久| 日韩av爽爽爽久久久久久| 久久精品一偷一偷国产| 亚洲人成人日韩中文字幕| 无码免费中文字幕视频| 久久国内精品一区二区三区| 亚洲精品国模一区二区| 环江| 激烈的性高湖波多野结衣| 依依成人精品视频在线观看| 五月天天天综合精品无码| 激情人妻中出中文字幕一区| 极品粉嫩小泬无遮挡20p| 日本一卡2卡3卡四卡精品网站| 免青青草免费观看视频在线| 91人妻无码成人精品一区91| 久久精品日日躁夜夜躁| 亚洲精品一区三区三区在| 久久香蕉欧美精品| 重口SM一区二区三区视频| 亚洲乱妇老熟女爽到高潮的片| 欧美一本大道香蕉综合视频| 欧美一区内射最近更新| 人妻在线中文字幕| 99热门精品一区二区三区无码| 久久人人爽人人爽人人av| 久久天天躁夜夜躁狠狠| 亚洲色偷偷色噜噜狠狠99| 亚洲精品无amm毛片| 亚洲免费一区二区av| 国产99在线 | 亚洲| 贺兰县| 伊人天天久大香线蕉av色| 少妇人妻偷人精品视蜜桃| 亚洲一区二区精品动漫|