2009-04-16 77 views
22

我在我的app.config中有一些設置,我打算是'全局' - 即。任何用戶都可以更改它們,所有用戶都可以獲得相同的設置。爲什麼應用程序設置在app.config中是隻讀的?

但是,除非我將它們更改爲用戶設置,否則它們是隻讀的。

這是爲什麼?

我應該如何去堅持我的應用程序的全局設置?

編輯:

這實際上是一個運行作爲本地系統作爲一個服務窗口服務的應用程序。它也可以由具有參數「/ config」的本地管理員手動運行,該參數啓動一個windows窗體來編輯配置值。

因此,在這兩種情況下它都有寫入權限%PROGRAMFILES%

我訪問我的設置方式是正是如此:

Settings.Default.MySetting = MyNewValue; 

當MySetting設置爲應用程序(在我的項目屬性,Settings.settings),我得到一個編譯時錯誤「MySetting讀只要」。

我對這個東西很陌生,還沒有找到一個很好的解釋它應該如何完成。例如,爲什麼我需要說'默認',這實際上意味着什麼?我不知道。如果任何人都可以指向我的app.config使用教程,那將非常有幫助。

回答

47

真正完整的答案:

在app.config設置是隻讀的,因爲有2種設置:

  1. 應用程序設置
  2. 用戶設置

的首先不會改變,除非應用程序發佈者發佈它的新版本。第二個不存儲在app.config中,而是存儲在user.config文件中。在這個user.config文件的缺失中,app.config提供了默認值。

如果MySetting是用戶設置:

Settings.Default.MySetting = MyNewValue; 
Settings.Default.Save(); 

它將在[User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version]用新設置創建一個user.config文件,這些設置將戰勝在app.config文件中的設置。

4

原因:應用程序設置旨在存儲在用戶沒有寫入權限的程序文件下的應用程序文件夾中。

如何:沒有對「所有用戶」的默認支持,但您應該能夠在公用文件夾中設置自己的自定義配置文件或使用數據庫。

1

不太清楚你在這裏的意思。 您的意思是說您允許用戶從UI中更改app.config並且更改不會被保留?

你叫

ConfigurationManager.RefreshSection("appSettings"); 

Configuration.Save(); 
+1

看我的編輯。我正在使用Settings.Default,而不是ConfigurationManager - 它讀取app.config? – Blorgbeard 2009-04-16 23:35:02

0

一個原因是app.config文件是在Program Files目錄下的應用程序的文件夾,一切都在計劃文件是隻讀對於默認的標準用戶。

另一個是app.config設置適用於系統範圍。如果一個用戶進行更改,則會影響其他用戶。普通用戶不應該能夠做出這種改變。任何可能影響多個用戶的事情都應該只設置爲系統管理員。每用戶設置屬於每個用戶的應用程序數據文件夾。

+0

沒關係 - 我只希望系統管理員能夠從我的程序中更改這些系統範圍的設置。但即使我以管理員身份運行,這似乎也不可能。 – Blorgbeard 2009-04-16 23:32:11

0

當您啓動應用程序時,配置設置被緩存在內存中。你可以使用xml來處理app.config文件來更改值。

3

簡而言之:除非您授予特權,否則任何人都無法更改機器上的任何位置。

有幾種方法來處理這種情況:

  • 您可以創建一個配置文件/某些註冊表設置,把這個在「一切爲了用戶」的個人資料,並授予「每個人」的權利改變那個特定的文件。在安裝過程中,您可以自動執行授予相應權限的程序,而您的程序可以處理其餘的程序。

  • 您可以利用UAC來確保當前用戶具有更改系統範圍設置的相應權限。這是推薦的方法,但也意味着不是每個人都可以更改特定的設置。

  • 您可以使用共享數據庫並將設置存儲在那裏。

  • ???

我不會建議更改程序文件目錄中的項目或更改默認權限。

編輯:作爲本地系統,你確實已經寫入了程序文件目錄的權限。如果您收到「只讀」錯誤,則意味着設置本身是隻讀的。您需要使用配置管理器才能更改配置文件中的設置。

希望這會有所幫助。

+0

您可以擴展「使用配置管理器」嗎?任何有用的鏈接? – Blorgbeard 2009-04-17 02:45:49

+1

當然,看看這裏:http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx – 2009-04-22 19:36:09

相關問題