.NET «Настройки» не работает на 64-разрядных (InvalidOperationException) - PullRequest
4 голосов
/ 02 марта 2011

Я создаю приложение на C # .NET (VS2010), но у меня возникли некоторые проблемы с сохранением настроек (которые прекрасно работают под 32-битной Windows XP) под 64-битной Windows 7.

У меня есть Settings.settings в решении, со значением теста настроек с именем res112text in, установленным как строка типа в пользовательской области, с 'Internal' в качестве настройки модификатора доступа.

Затем команда сохранения в

Properties.Settings.Default.res112text = "10002b";
try
{
   Properties.Settings.Default.Save();
}
catch (Exception e)
{
   MessageBox.Show(e.GetType().ToString() + " for " + e.Message.ToString());
}

при обнаружении мгновенно выводит тип ошибки:

System.InvalidOperationException

и для сообщения об исключении написано:

Method failed with unexpected error code 3

Я упаковываю файл .dll.config в установщик установки, и он прекрасно устанавливается в каталог Program Files.

Может кто-нибудь подсказать, что может пойти не так, пожалуйста?

Обновление: полная ошибка ..

Error System.InvalidOperationException: Method failed with unexpected error 
code 3. 

at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(
ResourceType resourceType, Boolean isContainer, String name, SafeHandle 
handle, AccessControlSections includeSections, Boolean createByName, 
ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)

at System.Security.AccessControl.FileSecurity..ctor(String fileName, 
AccessControlSections includeSections)

...

at System.Configuration.SettingsBase.Save()

at MyAddon.IEModule.ConfigSave()

Обновление: кажется, что нет обходного пути, когда включен защищенный режим IE, если только все пользователи не отключают его вручную.

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Возможно, ваша проблема вызвана недостаточными правами на сохранение файла.Как предложил Ханс Пассант, вам стоит взглянуть на изолированное хранилище: http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx

Цель изолированного хранилища - позволить приложениям с ограниченными правами сохранять данные.Страница MSDN содержит пример кода, который поможет вам начать работу.

0 голосов
/ 29 марта 2012

Я могу использовать метод Save (), если нет файла DLL "user.config", но я не могу сделать то же самое, когда он уже есть.Поэтому обходной путь, вероятно, заключается в том, чтобы вручную удалить файл «user.config» (что очень любопытно)

System.IO.File.Delete(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoaming).FilePath);

, а затем использовать метод Save () для создания нового файла «user.config».Пожалуйста, дайте мне знать, если есть подвох, но пока я его не заметил.

...