以编程方式向WPF中的文件添加写权限

时间:2011-08-10 06:04:14

标签: c# .net wpf

在我的WPF MVVM应用程序中,我有一个要修改的XML文件。 它在Visual Studio中成功运行。 但它在运行已安装的应用程序时显示错误。 如何通过代码设置权限..

我使用了这段代码,

// current security settings.
FileSecurity fSecurity = File.GetAccessControl(FilePath);

// Add the FileSystemAccessRule to the security settings.
string rr = WindowsIdentity.GetCurrent().Name;
fSecurity.AddAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().Name,
            FileSystemRights.FullControl, AccessControlType.Allow));


// Set the new access settings.
File.SetAccessControl(FilePath, fSecurity);

仍然无法解决问题......,

提前致谢..

见例外......

  

System.UnauthorizedAccessException:尝试执行   未经授权的操在   System.Security.AccessControl.Win32.SetSecurityInfo(ResourceType类型,   字符串名称,SafeHandle句柄,SecurityInfos securityInformation,   SecurityIdentifier所有者,SecurityIdentifier组,GenericAcl sacl,   GenericAcl dacl)at   System.Security.AccessControl.NativeObjectSecurity.Persist(字符串   name,SafeHandle句柄,AccessControlSections includeSections,Object   exceptionContext)at   System.Security.AccessControl.NativeObjectSecurity.Persist(字符串   name,AccessControlSections includeSections,Object exceptionContext)   在System.Security.AccessControl.NativeObjectSecurity.Persist(String   name,AccessControlSections includeSections)at   System.Security.AccessControl.FileSystemSecurity.Persist(字符串   fullPath)在System.IO.File.SetAccessControl(String path,   FileSecurity fileSecurity)

1 个答案:

答案 0 :(得分:0)

要设置权限,主要需要高级用户权限(假设您正在运行Windows 7)。

要验证上述内容,请将Visual Studio作为“以管理员身份运行”启动并调试您的代码。

什么是确切的异常消息?

以下是工作示例:它为用户组EveryOne设置了完整权限

private static void WriteAcl ( string filename ) 
        { 
            //Set security for EveryOne Group
            SecurityIdentifier sid =new SecurityIdentifier(WellKnownSidType.WorldSid, null);
            IdentityReference userIdentity =sid.Translate (typeof(NTAccount));           

            var AccessRule_AllowEveryOne = new FileSystemAccessRule ( userIdentity, FileSystemRights.FullControl, AccessControlType.Allow );
            var securityDescriptor = new FileSecurity ();
            securityDescriptor.SetAccessRule ( AccessRule_AllowEveryOne );            
            File.SetAccessControl ( filename, securityDescriptor ); 
        } 

仅当“用户帐户设置”设置为“从不通知”时,此代码才有效。看着它在你的电脑上打开了吗?

解决方法是使用Application Manifest以超级用户身份启动您的应用程序。

http://msdn.microsoft.com/en-us/library/bb756929.aspx