0

winform 응용 프로그램을 구현했습니다. 나는 구성 학급에 폴더구성 파일이 리디렉션 된 폴더에있을 때 Configuration.Save 메서드가 무단 액세스 오류를 throw합니다.

C에서 설정 파일과 함께 EXE를 저장하여 config 파일에서 응용 프로그램에 대한 사용자 설정을 저장 : 사용자는 \\ \의 AppData \ 로컬

정상적인 경우에는 정상적으로 작동하지만 사용자가 Appdata 폴더를 일부 서버 주소로 리디렉션 한 경우 문제가 발생합니다.이 경우 예외가 발생합니다.

인증되지 않은 작업을 시도했습니다.

나는 여기에 몇 가지 비슷한 질문을 찾았지만 이들 중 어느 것도 만족스러운 answers.I가 Configuration.Save 명령을 실행하기 전에 설정 파일을 삭제 시도가 없다하지만 예외 제공 :

구성 파일을 다른 프로그램에 의해 변경되었습니다.

그래서 어떻게이 문제를 해결할 수 있습니까?
1. 공유 :

at System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType 
type, String name, SafeHandle handle, SecurityInfos securityInformation, SecurityIdentifier owner, SecurityIdentifier group, GenericAcl sacl, GenericAcl dacl)  
at System.Security.AccessControl.NativeObjectSecurity.Persist(String 
name, SafeHandle handle, AccessControlSections includeSections, Object 
exceptionContext)  
at System.Security.AccessControl.NativeObjectSecurity.Persist(String 
name, AccessControlSections includeSections, Object exceptionContext) 
at System.Security.AccessControl.NativeObjectSecurity.Persist(String 
name, AccessControlSections includeSections)  
at System.Security.AccessControl.FileSystemSecurity.Persist(String 
fullPath)  
at System.IO.File.SetAccessControl(String path, FileSecurity fileSecurity)  
at System.Configuration.Internal.WriteFileContext.DuplicateTemplateAttributes(String source, String destination)  
at System.Configuration.Internal.WriteFileContext.DuplicateFileAttributes(String source, String destination)  
at System.Configuration.Internal.WriteFileContext.Complete(String 
filename, Boolean success)  
at System.Configuration.Internal.InternalConfigHost.StaticWriteCompleted(String 
streamName, Boolean success, Object writeContext, Boolean assertPermissions) at System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.WriteCompleted(String streamName, Boolean success, Object writeContext, Boolean assertPermissions)  
at System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.WriteCompleted(String streamName, Boolean success, Object writeContext)  
at 
System.Configuration.Internal.DelegatingConfigHost.WriteCompleted(String streamName, Boolean success, Object writeContext)  
at System.Configuration.UpdateConfigHost.WriteCompleted(String 
streamName, Boolean success, Object writeContext)  
at System.Configuration.MgmtConfigurationRecord.SaveAs(String filename, 
ConfigurationSaveMode saveMode, Boolean forceUpdateAll)  
at System.Configuration.Configuration.SaveAsImpl(String filename, ConfigurationSaveMode saveMode, Boolean forceSaveAll)  
at UtilityClasses.ConfigurationHandler.UpdateConfigFile(String key, String value, Boolean param) 
+0

코드를 공유하십시오. –

+0

@ S.Petrosov 코드를 추가하십시오. –

+0

문제는 응용 프로그램을 실행하는 사용자가 해당 경로에 대한 사용 권한이 없다는 것입니다. –

답변

0

당신은이 문제를 해결하는 두 가지 방법이있다 : 여기

string exePath = Path.Combine(Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)), @"Local\<folder name>\<exe file name>"); 
Configuration configFile = ConfigurationManager.OpenExeConfiguration(exePath); 
if (configFile.AppSettings.Settings[key] != null) 
{ 
    configFile.AppSettings.Settings.Remove(key); 
} 
if (param) 
{ 
    configFile.AppSettings.Settings.Add(key, value); 
} 
configFile.Save(ConfigurationSaveMode.Modified); 

는 예외 스택 추적입니다 : 다음은 설정 파일을 업데이트하려면 코드입니다 네트워크 폴더에 저장되므로 동일한 네트워크의 사용자에 대해 자동 화되지 않습니다.
2. 사용자 자격 증명을 사용하여 권한을 전달하고 네트워크 경로에 연결합니다.

+0

동일한 경로에서 여러 xml 및 텍스트 파일을 만들고 수정하기 때문에 연결 문제가 아닌 것 같습니다. . 그리고 그들은 아무런 문제도주지 않습니다. 설정 파일 만 문제가 있습니다. –

+0

또한 문제의 스택 추적을 추가했습니다. –

관련 문제