0

我已经实现了一个winform应用程序。我保存用户设置使用配置class.I存储exe文件与文件夹Configuration.Save方法抛出配置文件放在重定向文件夹时出现未经授权的访问错误

℃下在配置文件一起在配置文件的应用程序:\用户\\应用程序数据\本地

这在普通情况下很好,但我现在面临在用户重定向应用程序数据文件夹中的一些服务器address.In这种情况下,案件的问题,我得到异常:

试图执行未经授权的操作。

我发现了一些类似的问题在这里,但他们都没有任何令人满意的answers.I试运行Configuration.Save命令之前删除的配置文件,但是,让例外:

配置文件已被另一个程序改变。

那么,我该如何解决这个问题。 这里是我的代码来更新配置文件:

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

这里是异常的堆栈跟踪:

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

有两种方法来解决这个问题:
1.分享网络文件夹,以便它不针对同一网络的用户进行自动化。
2.使用用户凭据通过授权并连接到网络路径。

+0

但它似乎并不是连接问题,因为我还在相同路径上创建和修改了许多xml和文本文件。他们没有提出任何问题。只有配置文件出现问题。 –

+0

我也为该问题添加了堆栈跟踪。 –

相关问题