應該很多人都有遇到這個問題.現在給個完整的解決方案.
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