首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Visual Studio 安裝專案實作(7):自訂 Installer 類別完整程式碼

     編輯:關於C語言

SetSqlConStr.cs 完整實作

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

namespace SetSetup
{
    [RunInstaller(true)]
    public partial class SetSqlConStr : Installer
    {
        public SetSqlConStr() { InitializeComponent(); }

        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            // 從 CustomActionData 取得參數
            string sqlServerIP = Context.Parameters["SqlServerIP"];
            string database = Context.Parameters["DataBase"];
            string userName = Context.Parameters["UserName"];
            string password = Context.Parameters["Password"];
            string targetDir = 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);

            // 更新設定檔
            UpdateConConfig("ConnectionString", conString, targetDir + "WinUI.exe.config");
        }

        public static void UpdateConConfig(string conName, string conString, string configPath)
        {
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(configPath);
            var node = xmlDoc.SelectSingleNode(
                "configuration/connectionStrings/add[@name='" + conName + "']");
            node.Attributes["connectionString"].InnerText = conString;
            xmlDoc.Save(configPath);
        }

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

關鍵點解析

  • [RunInstaller(true)]:標記此類別為安裝程式可執行的安裝元件。
  • Context.Parameters:對應 CustomActionData 中的鍵值對 (不區分大小寫)。
  • TargetDir 來自 [TARGETDIR],必須在 CustomActionData 中加上尾隨反斜線 ( "[TARGETDIR]\" ),否則路徑串接會出錯。
  • 使用 XmlDocument 操作 XML,透過 XPath 定位 connectionStrings/add 節點修改屬性值。
  • 實作 Uninstall/Commit/Rollback 確保交易完整性 (雖本範例僅呼叫基底)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved