使用Visual Studio產生安裝程式並設定連接字串及其他自訂動作

來源:互聯網
上載者:User

應該很多人都有遇到這個問題.現在給個完整的解決方案.

1.添加一個安裝項目(當然你的其他項目應該都已經OK了.現在我們已經做好了一個WinUI的項目.記得要建立App.config檔案,而且要有連接字串的配置節存在.不然之後會出錯.因為我沒做錯誤處理.)

目前的App.config檔案內容,connectionString值為空白,需要使用者在安裝時輸入.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="ConnectionString" connectionString="" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

2.在安裝項目中添加項目輸出,如UI層,商務邏輯層,資料操作層,實體層,公用層等項目輸出.

3.選中左面的使用者案頭,在右邊右鍵建立新的捷徑.

4.產生安裝項目,就可以產生安裝程式了.不過還沒完呢.

5.安裝過程中需要使用者輸入串連資料庫的資訊或建立資料庫等操作.需要對安裝過程進行定製.在使用者介面視圖中進行.

6.添加讓使用者輸入資訊的對話方塊

7.
修改文字框的屬性.最多可以有4個文字框.定義視窗的標題(BannerText),視窗的描述資訊(BodyText),各文字框標籤的值
(Edit_Label),對應的屬性名稱(Edit_Property),預設值(Edit_Value),是否可見(Edit_Visible)等屬
性.

8.要建立一個類庫項目來實現定製安裝的功能.

9.建立功能實作類別

10.代碼如下(請注意看代碼注釋):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Configuration;
using System.Xml;
using System.IO;

namespace SetSetup
{
    /// <summary>
    /// 繼承安裝類
    /// www.szitr.com
    /// </summary>
    [RunInstaller(true)]
    public partial class SetSqlConStr : Installer
    {
        public SetSqlConStr()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 重寫基類的安裝方法
        /// </summary>
        /// <param name="stateSaver"></param>
        public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);
            //得到使用者輸入的參數
            //參數來自於後面 第 14 步 自訂動作的參數
            //自訂動作參數的屬性CustomActionData:/SqlServerIP=[SQLSERVER_NAME] /DataBase=[DATABASE_NAME] /UserName=[USERNAME] /Password=[PASSWORD] /TargetDir="[TARGETDIR]\"
            //中括弧中的就是之前各文字框的Edit_Property值.最後一個TARGETDIR是安裝路徑,注意後面還有個反斜杆
            string sqlServerIP = this.Context.Parameters["SqlServerIP"];
            string database = this.Context.Parameters["DataBase"];
            string userName = this.Context.Parameters["UserName"];
            string password = this.Context.Parameters["Password"];
            string targetdir = this.Context.Parameters["TargetDir"];
            //這裡寫你要執行的代碼
            //組合連接字串
            string conString = String.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3};Persist Security Info=True", sqlServerIP, database, userName, password);
            //更新串連字串設定值,WinUI.exe.config 要改成你設定檔的名稱
            UpdateConConfig("ConnectionString", conString, targetdir + "WinUI.exe.config");
        }

        /// <summary>
        /// 修改設定檔連接字串的值
        /// </summary>
        /// <param name="conName">連接字串名稱</param>
        /// <param name="conString">連接字串</param>
        /// <param name="configfilePath">設定檔路徑及名稱</param>
        public static void UpdateConConfig(string conName, string conString,string configfilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            //讀取設定檔
            xmlDoc.Load(configfilePath);
            //取得連接字串的節點
            XmlNode xmlNode = xmlDoc.SelectSingleNode("configuration/connectionStrings/add[@name='" + conName + "']");
            //修改連接字串
            xmlNode.Attributes["connectionString"].InnerText = conString;
            //儲存
            xmlDoc.Save(configfilePath);
        }

        public override void Uninstall(System.Collections.IDictionary savedState)
        {
            base.Uninstall(savedState);
        }
        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
        }
        public override void Rollback(System.Collections.IDictionary savedState)
        {
            base.Rollback(savedState);
        }
    }
}

11.回到安裝項目.開啟自訂動作視圖

12.在安裝中添加自訂動作

13.添加剛剛第9步所建立的項目的主輸出

14.修改此自訂動作的CustomActionData屬性

CustomActionData:/SqlServerIP=[SQLSERVER_NAME]
/DataBase=[DATABASE_NAME] /UserName=[USERNAME] /Password=[PASSWORD]
/TargetDir="[TARGETDIR]\"

15.重建一次.再執行安裝程式看看.已經OK啦!

最後看看我們的設定檔內容

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ConnectionString" connectionString="Data Source=DBServer;Initial Catalog=szitrDB;User ID=szitr.com;Password=szitr.com;Persist Security Info=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

成功!

希望對各位有協助.

代碼下載:http://szitr.com/bbs/thread-131-1-1.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.