我一直在测试我的应用程序,看看它在非管理用户运行时的效果如何,我发现文件处理存在问题。我在尝试覆盖文件时遇到UnauthorizedAccessException,如果该文件是由管理员用户创建的。
写出文件时,我首先将文件创建为.tmp文件,然后使用File.Copy覆盖原始文件。 .tmp文件已创建,但File.Copy失败。我的文件被写入公共目录(XP中的“C:\ Documents and Settings \ All Users \ Application Data”)。
我可以做些什么,以便所有用户都可以完全控制应用程序文件?
我发现了这个:
System.Security.AccessControl.DirectorySecurity sec =
System.IO.Directory.GetAccessControl ( directory );
FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,
FileSystemRights.FullControl, AccessControlType.Allow );
sec.AddAccessRule ( accRule );
将上述所有文件所在的目录解决此问题?或者我必须对每个文件做些什么?如果是这样的话是什么?
编辑:
非管理员用户无法修改管理员用户创建的文件。这个不好。我需要所有用户都可以编辑所有文件。是否在最初创建文件时可以设置某种权限,以便授予此权限?
答案 0 :(得分:1)
此代码将为用户提供该文件夹的完全访问权限,但是,这可能会再次失败。
确保您的应用程序始终可以存储信息的最佳方法是使用IsolatedStorage。但是,如果您需要访问应用程序之外的文件,那么这不是最佳解决方案。
答案 1 :(得分:1)
我刚检查了All Users \ Application Data目录的权限。 “用户”和“超级用户”ACL没有“删除子文件夹和文件”权限。
他们可以删除自己的文件,因为“CREATOR OWNER”ACL具有完全控制权。
至于如何解决这个问题,你可以给每个人所有的访问权限,但更好的想法就是授予“用户”和“用户”权限。 “超级用户”对应用程序的appdata目录中的“删除子文件夹和文件”权限进行ACL。
或者,您可以在创建“Users”和“Power Users”时为文件本身分配“删除”和“修改”权限。
答案 2 :(得分:1)
如果您使用类似的代码在创建文件后为每个人提供对该文件的完全访问权限,该怎么办?如果我理解正确,那么文件将始终与您的应用程序一起创建,对吧?然后,首先创建文件的用户还将有权调整文件的安全设置。然后,这只是在文件创建后设置公共权限的问题,所有用户都可以在以后替换该文件。