2011-03-01 3 views
4

C# .NET (VS2010) 응용 프로그램을 빌드 중이지만 64 비트 Windows 7에서 설정을 저장하는 데 문제가 있습니다 (32 비트 Windows XP에서 제대로 작동 함)..NET '설정'이 64 비트 (InvalidOperationException)에서 작동하지 않습니다.

해결책 범위에 res112text라는 이름의 설정 테스트 값이 있고 사용자 범위에서 유형 문자열로 설정되고 액세스 수정 자 설정으로 '내부'가있는 Settings.settings가 있습니다.

System.InvalidOperationException 

는 예외 메시지가 말한다 :

Method failed with unexpected error code 3

나는 즉시 발견 오류 유형을 제공 할 때

그런 다음

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

에 명령을 저장 .dll.config 파일을 설치 설치 관리자로 패키징하고 있습니다. Program Files 디렉토리에 들어간다.

아무도 잘못 될 수도있는 제안을 해주실 수 있습니까?

업데이트 : 그것은 나타납니다 모든 사용자가 수동으로 스위치를 끄고하지 않는 IE의 보호 모드가 활성화 된 경우 해결 방법이되지 않습니다 : 전체 오류가

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() 

업데이트 ..입니다.

+2

잘못된 예외 메시지가 있지만 격리 된 저장소가 아닌 다른 곳에서 파일을 만드는 탐색기 추가 기능을 사용하면 오류 고래가 발생합니다. 이름 충돌도 불가능하지 않습니다. –

+0

어떤 방법을 사용 하시겠습니까? 내가 파일 등 설정을 저장하려고했지만 모든 것을 시도한 한 시스템은 그것을 거부했다. – Donna

+0

누구나 내가 사용하고있는 방법에 대한 해결책을 제안 할 수 있습니까 ?? – Donna

답변

5

파일을 저장할 권한이 없기 때문에 문제가 발생한 것일 수 있습니다. Hans Passant와 마찬가지로 격리 저장소를 살펴보아야합니다. http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx

격리 된 저장소의 목적은 제한된 권한으로 응용 프로그램에서 데이터를 저장할 수 있도록하기위한 것입니다. MSDN 페이지에는 시작 및 실행에 필요한 코드 샘플이 포함되어 있습니다.

+1

설정이 Visual Studio의 기본 제공 기능이라면 권장되는 저장 방법이 아닌 이유를 이해할 수 없습니까? – Donna

+0

IE의 보호 기능이 작동하지 않는 것처럼 보입니다. 대신 격리 저장소를 구현하는 방법을 살펴 보겠습니다. 감사합니다. – Donna

0

DLL "user.config"파일이 없으면 Save() 메서드를 사용할 수 있지만 이미있을 때는 같은 작업을 수행 할 수 없습니다. 그래서 해결 방법은 (호기심 작동되는) 수동

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

을 "user.config"파일을 삭제 한 다음 새로운 "user.config"파일을 생성하기 위해 저장() 메서드를 사용하여 아마. 잡기가 있으면 알려주세요. 그러나 지금까지 나는 눈치 채지 못했습니다.

관련 문제