應該很多人都有遇到這個問題.現在給個完整的解決方案.
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>
成功!
希望對各位有幫助.