2009-11-06 40 views
12

它們有什麼用處,如果它們無法改變其默認值呢?修辭問題。如何避免應用程序範圍設置爲只讀?

首先,繞過設置系統並直接寫入應用程序範圍設置文件(下一段中的安全問題)的最佳方法是什麼?的XmlReader/XmlWriter的?

IIRC,如果應用程序試圖寫入其Program Files文件夾,Windows Vista和7會做一些魔術來防止這種情況發生。我想我需要調用UAC來升級,並且我必須在應用程序的「選項」窗口的「確定」按鈕上放置那個花哨的盾牌圖標,等等。鏈接到一個快速的方法?

或者,您可能會告訴我,我正在嘗試做的事很愚蠢,我應該將我可更改的應用程序範圍設置存儲在其他位置。

回答

10

如果將它們更改爲「用戶」設置,則可以在代碼中更改它們,並且在調用Save()時,它們將保存到當前用戶本地設置文件夾中的user.config文件。

很明顯,這意味着它們對於每個用戶都可能不同。通常,對於每個用戶而言相同的全局應用程序設置不會在代碼中進行修改,因爲一位用戶所做的更改會影響其他人(因此應用程序設置爲只讀)。

如果您不希望它們成爲用戶範圍,請參閱ConfigurationManager類。這將允許您手動讀取和寫入.config文件。請記住,c:\ program files \文件夾受到保護,普通用戶無法訪問它(這會導致UAC提示或vista/win7失敗)。仔細考慮你將如何處理它,並記住任何對app.config的更改都會影響所有用戶。

在Windows中沒有所有用戶都有寫入權限的位置。

+2

但這正是我想要的!用戶A修改某些內容,而用戶B不必重複該修改。 – CannibalSmith

+9

更奇怪的是,更多的人不需要這個功能。當然很多應用程序都具有程序員想要構建友好UI的全局設置。 –

+1

@Ben - 如果你確實想將設置直接保存到全局,你可以使用[ConfigurationManager](http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx)類。 exe.config文件。很明顯,如果該文件位於c:\ programfiles \中,您的用戶將需要相應的管理權限。首先像這樣打開配置:var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);然後像這樣添加新的設置:config.AppSettings.Settings.Add(「key」,「value」); (或者你可以創建自定義配置部分)不要忘記打電話保存。 –

0

看吧:Best practice to save application settings in a Windows Forms Application

的的applicationSettings類不 支持設置保存到 app.config文件。這是非常多的 設計,與適當的 受保護的用戶帳戶(認爲Vista的UAC) 運行的應用程序沒有寫入 程序的安裝文件夾。

您可以使用ConfigurationManager類與 對戰。但 微不足道的解決方法是進入 設置設計器並將 設置的範圍更改爲用戶。如果該 造成困難(例如,設置爲 與每個用戶相關),則應該將 將您的選項功能放入單獨的 程序中,以便您可以要求提供 權限提升提示。或者使用設置放棄 。

相關問題