1

我一直在测试我的应用程序以查看它在由非管理用户运行时的运行情况,并且发现文件处理存在问题。如果文件是由管理员用户创建的,则在尝试覆盖文件时出现 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 );  

对所有文件所在的目录执行上述操作会解决这个问题吗?还是我必须对每个文件做些什么?如果是这样,那是什么东西?

编辑:

非管理员用户不能修改管理员用户创建的文件。情况不妙。我需要所有用户都可以编辑所有文件。最初创建文件时是否可以设置某种权限来授予此权限?

4

3 回答 3

1

此代码将授予用户对该文件夹的完全访问权限,但是,这可能会再次因安全问题而失败。

确保您的应用程序始终可以存储信息的最佳方法是通过 IsolatedStorage。但是,如果您需要在应用程序之外访问您的文件,那么这不是最佳解决方案。

于 2009-09-17T08:42:45.757 回答
1

我刚刚检查了 All Users\Application Data 目录的权限。“用户”和“高级用户”ACL 没有“删除子文件夹和文件”权限。

他们可以删除自己的文件,因为“CREATOR OWNER”ACL 具有完全控制权。

至于如何解决这个问题,您可以为每个人授予所有访问权限,但更好的想法是授予“用户”和“高级用户”ACL 对应用程序的 appdata 目录的“删除子文件夹和文件”权限。

或者,您可以在创建文件时为“用户”和“高级用户”分配文件本身的“删除”和“修改”权限。

于 2009-09-21T19:05:57.203 回答
1

如果您在创建文件后使用类似的代码让每个人都可以完全访问文件,怎么样?如果我对您的理解正确,文件将始终使用您的应用程序创建,对吗?然后,首先创建文件的用户也将有权调整文件的安全设置。那么这只是一个在文件创建后设置公共权限的问题,并且所有用户以后都可以替换该文件。

于 2009-09-21T19:23:10.860 回答