[Window Form]修改安裝檔路徑到App.Config

[Window Form]修改安裝檔路徑到App.Config

問題如下:

原先在App.Config中,設定sqlite的資料庫檔案路徑


<configuration>
	<appSettings>
		<add key="ConnectString" value= "URI=file:NewMedia.db3,version=3"/>		
	</appSettings>

</configuration>

當讀取其它資料夾檔案時,資料庫檔案路徑會跟著改變造成資料庫檔案找不到

所以在安裝時要將設定資料庫檔案路徑

方法如下:

加入[安裝程式類別]

pic1

開啟程式碼檢視修改程式


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;
        }

在安裝檔專案加入自訂動作

pic2

pic3

pic4

修改CustActionData

pic5

重新compile整個專案就大功告成了^^