[Window Form]修改安裝檔路徑到App.Config
問題如下:
原先在App.Config中,設定sqlite的資料庫檔案路徑
<configuration>
<appSettings>
<add key="ConnectString" value= "URI=file:NewMedia.db3,version=3"/>
</appSettings>
</configuration>
當讀取其它資料夾檔案時,資料庫檔案路徑會跟著改變造成資料庫檔案找不到
所以在安裝時要將設定資料庫檔案路徑
方法如下:
加入[安裝程式類別]
開啟程式碼檢視修改程式
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Configuration;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace HellInstall
{
[RunInstaller(true)]
public partial class Installer1 : Installer
{
public Installer1()
{
InitializeComponent();
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
string targetDirectory = Context.Parameters["targetdir"];
string exePath = string.Format("{0}NewMediaTest1.exe", targetDirectory);
try
{
FileInfo fi = new FileInfo(exePath);
string[] DBPath = new string[] { "URI=file:" + fi.FullName.Replace(fi.Name, "").Replace("\\", "\\\\") + "NewMedia.db3,version=3" };
NewMediaTest1.Model.FileIO.SaveConfig(fi.FullName, DBPath);
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
}
}
自定義的函式
/// Saves the config exe.config.
/// </summary>
/// <param name="myvalue">The myvalue.</param>
public static void SaveConfig(string filename ,params string[] myvalue)
{
int i;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filename + ".config");//exe.config修改
XmlNode XN = xmlDoc.SelectSingleNode("/configuration/appSettings");
for (i = 0; i < myvalue.Length; i++)
{
XN.ChildNodes.Item(i).Attributes[1].Value = myvalue[i];
}
xmlDoc.Save(filename + ".config");//exe.config修改
xmlDoc = null;
}
在安裝檔專案加入自訂動作
修改CustActionData
重新compile整個專案就大功告成了^^