前言
在發布軟體時,我們通常會將軟體打包為一個安裝檔來方便使用者安裝,
而使用者只需要根據安裝的步驟一步步地輸入該設定的資訊,
就可以非常輕鬆的部屬軟體,那如果希望在安裝時同時讓使用者輸入資料,
並同時將結果更新至config檔之中,又該怎麼做呢?
接下來將在文章中做一個示範說明
實際演練
首先建立一個Windows From專案,並配置簡單的控制項如下,
再新增一個app.config檔案,並配置三個appsettings
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Sample.Config1" value="This is config 1"/> <add key="Sample.Config2" value="This is config 2"/> <add key="Sample.Config3" value="This is config 3"/> </appSettings> </configuration>
當按下按鈕時,會分別顯示各AppSettings的值,如
接下來我們來開始為這個Windows Form建立一個Setup Project,
並且在安裝過程中,加入輸入的欄位,來讓使用者輸入自己想要的Config設定,
選擇Add New Project,並選擇Setup Project
滑鼠右鍵選擇Application Folder,新增Project Output,
選擇之前建立的Windows Form專案
在SampleSetup上按滑鼠右鍵,選擇View => User Interface,加入自訂輸入畫面
點選Start,選擇Add Dialog
因為我們只有三個Config要設定,所以在這邊我們選擇Textboxes (B)
將Textboxes (B) 移至圖中的位置,並根據自己需求修改Textboxes (B) 屬性如下
在這邊我們將第四個欄位的Visiable設為false,因為我們只有三個需要修改的地方,
接下來滑鼠右鍵點選Setup Project,選擇View => Custom Actions
在Install資料夾按滑鼠右鍵,選擇Add Custom Action
選擇Application Folder裡面,我們專案的Output,
接下來設定Primary Output的屬性如下
可以看到我們主要修改的是CustomActionData欄位,
這邊的格式為/name1=[value1] /name2=[value2],每組資料之間有一個空格
name指的是待會要讀取的參數名稱,而value則是剛剛Textboxes (B)的各欄位名稱
接下來我們必須要在Windows Form專案中新增一個Installer Class,
來進行我們讀取使用者輸入的參數,並修改Config的動作
新增Installer
接下來我們會覆寫Installer的Install方法,加入修改config的片段
[RunInstaller(true)] public partial class InstallerHelper : Installer { public InstallerHelper() { InitializeComponent(); } public override void Install(System.Collections.IDictionary stateSaver) { base.Install(stateSaver); try { var map = new ExeConfigurationFileMap(); //Get app.config path map.ExeConfigFilename = Context.Parameters["assemblypath"] + ".config"; //Get Config and AppSettings var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); var appSettings = config.AppSettings; //Get input value from setup project var configValueList = new List<string>() { Context.Parameters["Config1"], Context.Parameters["Config2"], Context.Parameters["Config3"] }; //assign input value to appSettings for (int i = 1; i <= 3; i++) { appSettings.Settings["Sample.Config" + i].Value = configValueList[i - 1]; } //save app.config config.Save(); } catch (Exception e) { string s = e.Message; } } }
到這邊我們就完成了在Install中修改Config的設定,我們可以Build Setup Project,
並點選我們建立好的Install檔案,可以看到在中間也確實出現了輸入畫面
安裝完後,我們執行安裝好的程式,點選第一個按鈕
我們可以看到有正確的依照安裝時輸入的設定顯示,大功告成!
結語
方便的安裝方式,不僅可以讓使用者方便使用,
也可以降低使用者直接修改Config檔案,而產生錯誤的機率,
大家也可以依照自己實際上的需求來修改安裝過程所需要的動作,
如果有任何問題歡迎大家多多提出來! ^_^