小小的範例程式。

手上有個排程定期執行的程式(為了做到執行時不顯示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都可以不用建立,謝謝補充。

Post a comment