11

我試圖使用ConfigurationManager將用戶設置保存到配置文件。如何通過ConfigurationManager寫入User.Config文件?

我想將這些設置的範圍僅限於用戶,因爲如果沒有管理員權限,應用程序更改無法保存在Vista/Win 7上。

這似乎讓我看到用戶的配置,它似乎保存在Win 7中([Drive]:\ Users \ [Username] \ AppData \ Local \ [ApplicationName] \ [AssemblyName] [hash] \ [版\)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 

每當我嘗試在所有保存的任何更改這個配置我得到這個異常:

InnerException: System.InvalidOperationException 
Message="ConfigurationSection properties cannot be edited when locked." 
Source="System.Configuration" 
StackTrace: 
    at System.Configuration.SectionInformation.VerifyIsEditable() 
    at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates) 

我曾嘗試添加自定義的ConfigurationSection這個配置。我曾嘗試添加到AppSettingsSection。每當我打電話給config.Save()它就會拋出上面的異常。

任何想法?

我嘗試通過Project-> Settings設計器使用ApplicationSettingsBase類,但它似乎沒有保存自定義類型。我希望能夠保存自定義類型的功能。

+0

原來你可以使用自定義類型與項目 - >設置設計器。它們不會在類型對話框中列出它們,但是如果您鍵入正確的名稱/名稱空間,則可以使用任何您想要的類型。類型應該是XmlSerializable或可以使用TypeConverter轉換爲字符串或從字符串轉換。 – 2011-05-11 16:48:40

回答

8

您需要設置SectionInformation.AllowExeDefinition值的部分:

Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming); 
UserSettings settings; 
if ((settings = (UserSettings)configuration.Sections[GENERAL_USER_SETTINGS]) == null) 
{ 
     settings = new UserSettings(); 
     settings.SectionInformation.AllowExeDefinition = 
       ConfigurationAllowExeDefinition.MachineToLocalUser; 
     configuration.Sections.Add(GENERAL_USER_SETTINGS, settings); 
     configuration.Save(); 
} 

的默認值是ConfigurationAllowExeDefinition.MachineToApplication即只允許放在machine.config中和app.exe.config部分。

+0

我會試試。我嘗試過設置AllowExeDefinition屬性一次,並導致config.Save()發射的異常。我將複製此代碼段並重試。 – 2010-04-13 20:19:48

+0

看來我需要設置AllowExeDefinition之前添加該部分並保存更改第一次。現在一切似乎都正常工作。 – 2010-04-13 20:29:01

+2

出於某種原因,使用_ConfigurationManager.OpenExeConfiguration_和_ConfigurationUserLevel_ overload,不允許我編輯和保存該文件,聲稱在locked_時無法編輯_ConfigurationSection屬性。只有當我使用_string exepath_ overload時,我才能保存配置。 – itsho 2013-01-06 20:50:18