2013-03-23 82 views
6

我有一個程序,我將使用VS中部署的包進行部署。讓用戶在部署後編輯配置文件

現在我有,我希望用戶能夠修改(即使運行該程序後)的app.config文件,但我不知道究竟在何處安裝程序轉儲文件,我不期待用戶可以繞過他們的文件系統。我想要的是 - 我要求用戶指定一些目錄(無論如何要發生它自一個遊戲) - 我檢查那裏的配置文件,如果它不存在,我複製它從根目錄程序可以看到的目錄 - 然後讀取'save'文件夾中的目錄。

這就是說,它的聽起來像一個非常醜陋和hacky的解決方案 - 有更好的?

回答

8

我不會鼓勵用戶修改app.config。 app.config被複制到與您的應用程序exe相同的目錄中,並且通常包含您的應用程序依賴其運行的設置,例如,數據庫連接字符串,系統默認值等。通過讓用戶直接更改其中的設置,可以演奏危險的遊戲。

一種更安全的方法是將另一個XML文件導出到用戶文檔文件夾中,以便它們可以覆蓋應用程序設置。首先將app加載到app.config中,然後使用用戶自己的配置文件中的任何設置覆蓋這些值。

我也建議爲此實現某種用戶界面,即使它非常基本。您的普通用戶無法直接編輯XML,因此錯誤太多。

+0

同意 - 讓用戶直接編輯app.config會要求麻煩,因爲處理任何可能導致的異常都很困難。如果您自己推出自己的serlializable類並管理其存儲空間,則處理異常情況會更容易。 – 2013-03-23 10:35:59

+0

有趣,沒有考慮到。我想我會推出我自己的格式,因爲我不太喜歡手工修改XML,我不確定我需要多少參數(可能是噸) – Haedrian 2013-03-23 11:09:23

+0

什麼反對滾動你的自己的格式,但是,請注意,您還需要推出自己的序列化程序。 .NET有很好的XML支持,可以做出像這樣微不足道的事情。 – James 2013-03-23 11:16:34

1

您可以使用應用程序(或用戶)設置來保留用戶可能想要在配置中進行的任何更改。請參閱ApplicationSettingsBase類和this article。 說你的應用程序包含一個用戶設置所謂Score,內部管理由一個名爲MyUserSettings類:

public class MyUserSettings : ApplicationSettingsBase 
{ 
    [UserScopedSetting()] 
    [DefaultSettingValue(0)] 
    public int Rank 
    { 
     get 
     { 
      return (int)this["Score"]; 
     } 
     set 
     { 
      this["Score"] = value; 
     } 
    } 
} 

您可以保存當前值,通常發生在主窗體關閉,使用Save方法:

myUserSettings.Save(); 

如果您希望用戶直接修改某些設置,則可以使用屬性網格或您自己的表單來綁定MyUserSettings類的實例。 如果設置被標記爲「用戶」,那麼這些值將被存儲在user.config文件中,%InstallRoot%\Documents and Settings\username\Local Settings%InstallRoot%\Documents and Settings\username\Application Data(用於漫遊配置文件)。