2012-08-27 166 views
0

基本上我有一個C#應用程序,它具有某些設置,我希望任何用戶都能夠更改,但我希望這些設置適用於所有用戶。 (確切的實現是針對特定於計算機的,但不是用戶特定的項目,例如文件夾路徑和COM端口等)到目前爲止,我已經使用appSettings實現了這一點,它一直運行良好,但是當用戶沒有權限寫入Program Files目錄。AppSettings,UserSettings和註冊表項

我正在尋找關於如何最好地處理這種情況的建議,或者利用appSettings,userSettings或註冊表中的值。無論我使用哪種解決方案,都必須爲非管理員以及那些管理員的用戶工作。什麼會被視爲這種類型的要求的「最佳做法」?

+0

請注意註冊表的想法。我們幾乎沒有登記註冊表。不要回去。 – Steve

+0

我主要在尋找推薦或最佳實踐來處理這些事件,其他人在這種情況下做什麼? – crlanglois

回答

2

我會嘗試編寫一個XML文件,其中包含所有需要讀取/寫入的設置。
該文件可能(使用Enviroment.SpecialFolder.CommonApplicationData)

要做到這一點easyest方法是使用一個DataTable和中WriteXML的ReadXml的內置方法被保存在一個衆所周知的文件夾一樣ProgramData。
您可以實現一個內部使用數據表加載和保存設置的類,並提供方法來檢索和設置單個設置(數據表中的行);

public class MyAppSettings 
{ 
    // Where to store your settings 
    private DataTable _storage = null; 

    public MyAppSettings() 
    { 
     string settingFile = Path.Combine(Environment.GetFolderPath 
          (Environment.SpecialFolder.CommonApplicationData), 
          "MyAppName", "MyAppSettings.xml"); 
     _storage = new DataTable(); 
     _storage.ReadXml(settingFile); 
    } 
    public void Save() 
    { 
     string settingFile = Path.Combine(Environment.GetFolderPath 
          (Environment.SpecialFolder.CommonApplicationData), 
          "MyAppName", "MyAppSettings.xml"); 
     _storage.WriteXml(settingFile); 
    } 

    public string GetValue(string settingName) 
    { 
     // Code to search the base table 
    } 
    public void SetValue(string settingName, string settingValue) 
    { 
     // Code to update/insert the base table 
    } 
} 
+0

這是一個體面的想法,我希望有更多的標準方法,但這可能是一條路。 – crlanglois

+0

你可以很容易地擴展這個類。添加GetIntValue和SetIntValue等。也可以選擇編寫一個將選項值存儲在數據庫中的類。 – Steve

1

您應該爲此使用Application Settings

Visual Studio provides good support並使用您聲明的屬性(設置)自動生成訪問器類。

+0

我相信問題在於,userSettings可以被所有用戶保存,但是每個用戶都是獨立的,appSettings對所有用戶都是通用的,但需要管理員提升才能修改。 – crlanglois