成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

VS.NET2005 web程序自定義安裝包的制作

2010-08-28 10:52:45來源:西部e網作者:

  利用VS2005的“Web安裝項目”建立安裝包很難對安裝過程進行詳細控制,因此直接采用“安裝項目”來建立web程序安裝包。我們需要安裝過程中自動創建虛擬目錄,并且可以修改數據庫連接字符串,假設我們在安裝過程中需要用戶修改web.config文件里連接字符串其形式如下:

<configuration>
     ...

    <connectionStrings>
    <add name="myDataBase" connectionString="Database=testDataBase;Server=10.78.25.23;Uid=sa;Pwd=123;" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    ...
       
</configuration>

  則建立安裝包的過程如下:

  1)發布網站:右鍵點擊web項目,在彈出菜單里點擊“發布網站”將它發布到本地機器。

  2)新建安裝項目:從菜單處依次點 文件->新建->文件->項目->其他項目類型->安裝和部署->安裝項目,輸入名稱與位置,并確定。在項目屬性里設置相應的說明內容。

  3)在啟動項里添加文本框:右鍵點擊項目,在彈出菜單里選擇視圖->用戶界面,出現用戶界面的樹形結構。右鍵點擊“啟動”節點,添加“文本框(A)”與“文本框(B)”,并將它們移動到“安裝文件夾”之上。這兩個界面用來接收用戶安裝過程中輸入的“web服務地址與虛擬目錄”和“數據庫連接字符串”。兩個文本框的屬性設置如下:

文本框(A)

BannerText:網站設置

BodyText:設置web服務地址與虛擬目錄

Edit1Label:web服務器:

Edit1Property:IISSERVER  //這個是自己起的名字

Edit1Value:localhost  //此為默認值,可不設置

Edit1Visible:True

Edit2Label:虛擬目錄:

Edit2Property:VIRTUALDIR   //這個是自己起的名字

Edit2Value:testWeb //此為默認值,可不設置

Edit2Visible:True

Edit3Visible:False

Edit4Visible:False

文本框(B)

BannerText:數據庫設置

BodyText:設置數據庫連接字符串

Edit1Label:數據庫服務器:

Edit1Property:DBSERVERNAME   //這個是自己起的名字

Edit1Value:10.78.25.23    //此為默認值,可不設置

Edit1Visible:True

Edit2Label:數據庫名稱:

Edit2Property:DBNAME   //這個是自己起的名字

Edit2Value:testDataBase   //此為默認值,可不設置

Edit2Visible:True

Edit3Label:登錄帳號:

Edit3Property:USERNAME   //這個是自己起的名字

Edit3Value:sa //此為默認值,可不設置

Edit3Visible:True

Edit4Label:登錄密碼:

Edit4Property:PASSWORD  //這個是自己起的名字

Edit4Value:

Edit4Visible:True

  4)建立安裝程序類:新建一c#類庫項目“SetupClassLibrary”,然后右鍵 添加->新建項->安裝程序類,建立一安裝程序類如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Data;
using System.Data.SqlClient;
using System.Configuration.Install;
using System.Management;
using System.Collections;
using Microsoft.Win32;
using System.Collections.Specialized;

namespace SetupClassLibrary
{
    [RunInstaller(true)]
    public partial class MyInstaller : Installer
    {
        //先設置私有成員,對應安裝程序里接收到的用戶輸入
        private string dbname;

        private string dbserver;

        private string user;

        private string pwd;

        private string iis;

        private string physicaldir;

        private string virtualdir;

        public static string VirDirSchemaName = "IIsWebVirtualDir";

        private string _target;

        private DirectoryEntry _iisServer;

        private ManagementScope _scope;

        private ConnectionOptions _connection;

        public MyInstaller()
        {
            InitializeComponent();
        }

        WriteWebConfig 修改web.config的連接數據庫的字符串 WriteWebConfig 修改web.config的連接數據庫的字符串

        private void WriteWebConfig()
        {
           //加載配置文件
            System.IO.FileInfo FileInfo = new System.IO.FileInfo(this.Context.Parameters["targetdir"] + "/web.config");
            if (!FileInfo.Exists)
            {
                throw new InstallException("缺少配置文件 :" + this.Context.Parameters["targetdir"] + "/web.config");
            }
            System.Xml.XmlDocument xmlDocument  = new System.Xml.XmlDocument();
            xmlDocument.Load(FileInfo.FullName);

           //修改連接字符串
            foreach (System.Xml.XmlNode Node in xmlDocument["configuration"]["connectionStrings"])
            {
                if (Node.Name == "add")
                {
                     if (Node.Attributes.GetNamedItem("name").Value == "myDataBase")
                    {
                        Node.Attributes.GetNamedItem( "connectionString").Value = String.Format("Database={0};Server={1};Uid={2};Pwd={3};", dbname, dbserver, user, pwd);
                      
                    }

                }
            }
                  
            xmlDocument.Save(FileInfo.FullName);

        }

        #endregion

        創建虛擬目錄 創建虛擬目錄

        private void CreateVirtualDir()
        {
            string constIISWebSiteRoot = "IIS://"+iis+"/W3SVC/1/ROOT";
            DirectoryEntry root  = new DirectoryEntry(constIISWebSiteRoot);

            DirectoryEntry tbEntry  = root.Children.Add(virtualdir, root.SchemaClassName);
            tbEntry.Properties["Path"][0] = physicaldir;//設置物理地址
            tbEntry.Invoke("AppCreate", true);
            //tbEntry.Properties["DefaultDoc"][0] = "Default.aspx";//設置起始頁
            tbEntry.CommitChanges();

        }

        #endregion

        Install  從這里開始啟動安裝 Install  從這里開始啟動安裝

        public override void Install(IDictionary stateSaver)
        {

            base.Install(stateSaver);

            physicaldir = this.Context.Parameters["targetdir"].ToString();

            virtualdir = this.Context.Parameters["virtualdir"].ToString();

            dbname = this.Context.Parameters["dbname"].ToString();

            dbserver = this.Context.Parameters["dbserver"].ToString();

            user = this.Context.Parameters["user"].ToString();

            pwd = this.Context.Parameters["pwd"].ToString();

            iis = this.Context.Parameters["iis"].ToString();

            // 添加網站
           CreateVirtualDir();

            // 修改web.config
            WriteWebConfig();    

        }

        #endregion

        Uninstall 刪除 Uninstall 刪除

        public override void Uninstall(IDictionary savedState)
        {
           //添加自定義的卸載代碼
            if (savedState == null)
            {
                throw new ApplicationException("未能卸載!");
            }

            else
            {
                base.Uninstall(savedState);
            }

        }

        #endregion

    }
}

  5)添加項目輸出

  編譯生成“SetupClassLibrary”

  然后右鍵單擊2)中建立的安裝項目 添加->項目輸出中選擇“SetupClassLibrary”,選中“主輸出”,單擊“確定”。這樣你可以在解決方案安裝項目樹中看見多了“主輸出來自SetupClassLibrary(活動)”節點。

  再右鍵此安裝項目 視圖->自定義操作 中選擇“安裝”節點,右鍵 “添加自定義操作”,進入“應用程序文件夾”,選中“主輸出來自SetupClassLibrary(活動)”,單擊“確定。

  選中“安裝”下的“主輸出來自SetupClassLibrary(活動)”節點,在其屬性窗口中設置CustomActionData 的值為 /dbname=[DBNAME] /dbserver=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWORD] /iis=[IISSERVER]  /virtualdir=[VIRTUALDIR] /targetdir="[TARGETDIR]"",這是設置文本框(A)和文本框(B)中的輸入與安裝程序類中要訪問的變量之間的對應關系,其中 targetdir="[TARGETDIR]""代表應用程序安裝目錄(注意:各個對應關系之間必須用空格隔開)。

  6)添加文件:這一步,我們將發布網站時生成的文件夾全部克隆到安裝項目中。

  右鍵安裝項目,視圖->文件系統 在“應用程序文件夾”下按發布網站時生成的文件夾里的結構添加文件夾與文件。

  說明:

  1.這些文件都需要我們從發布網站的文件夾里添加進來,比如一般需要建立對應的“bin”文件夾,并在里面添加對應的程序集文件,而且一般我們會在“應用程序文件夾”根下添加web.config文件。

  2.這里的文件將被復制到目標計算機上,此安裝項目將在目標計算機上建立虛擬目錄指向此文件夾。

  7)編譯生成,OK! 到安裝項目的debug或者release目錄下可看見生成的安裝包。

關鍵詞:VS.NET
主站蜘蛛池模板: 姚安县| 洪雅县| 炎陵县| 南和县| 南乐县| 灵丘县| 弋阳县| 宝坻区| 崇左市| 井研县| 昭平县| 荥阳市| 平果县| 庐江县| 乐昌市| 临海市| 平陆县| 平度市| 辉南县| 乌鲁木齐市| 太保市| 舞钢市| 英超| 满洲里市| 平山县| 翼城县| 汤原县| 台江县| 皮山县| 晋州市| 舟曲县| 西平县| 习水县| 云安县| 大安市| 河源市| 卫辉市| 潞西市| 长子县| 广昌县| 会东县|