CODE-透過程式修改App.config
3 |
小小的範例程式。
手上有個排程定期執行的程式(為了做到執行時不顯示Console視窗,我選擇做成Window Form專案,再讓Form1隱形[補充2009-12-04: 此處用Form1是因為我還是寫了一個方便開發測試Debbug專用的UI,事實上連Form1可以不用建立,直接執行必要的邏輯即可,謝謝
],設定都放在MyApp.exe.config的AppSettings裡。但其中有些設定值較複雜,需要注意是否符合規則、或是要加密後儲存。由於不想另外寫UI或獨立設定程式,於是我決定用"MyApp.exe set configKey configValue"命令列執行方式將設定值檢核及加密邏輯內建在同一支執行檔裡。以下就是我的範例,供大家參考指教。(主要是借重Configuration.Save Method將修改值寫回)
[STAThread]
static void Main(string[] args)
{
if (args.Length == 3)
{
string mode = args[0];
string configKey = args[1];
string configValue = args[2];
if (mode == "set")
{
System.Configuration.Configuration conf =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
//... Logic of conversion or checking on configValue ...
if (conf.AppSettings.Settings[configKey] == null)
conf.AppSettings.Settings.Add(configKey, configValue);
else
conf.AppSettings.Settings[configKey].Value = configValue;
conf.Save(ConfigurationSaveMode.Modified);
}
MessageBox.Show("Config [" + configKey + "] is set!");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Comments
# by VampireNeo
於是我決定用"MyApp.exe.config set configKey configValue"命令列執行方式 應該是 "MyApp.exe set configKey configValue" ?
# by Phoenix
如果Form是沒必要的,其實連new都不用,就會變成無視窗的程式了0.0
# by Jeffrey
to VampireNeo, 嘿... 又打錯字了,感謝指正。 to Phoenix, 此處用Form1是因為我還是寫了一個方便開發測試Debbug專用的UI,事實上的確連Form1都可以不用建立,謝謝補充。