C# 非管理用户的文件处理

C# 非管理用户的文件处理,c#,file-io,file-permissions,non-admin,C#,File Io,File Permissions,Non Admin,我一直在测试我的应用程序,看看它在由非管理用户运行时工作得如何,我发现了文件处理方面的问题。如果文件是由管理员和管理员用户创建的,则在尝试覆盖文件时,我收到UnauthorizedAccessException 写文件时,我首先将文件创建为.tmp文件,然后使用file.Copy覆盖原始文件。.tmp文件已创建,但file.Copy失败。我的文件被写入公共目录(“XP中的C:\Documents and Settings\All Users\Application Data”) 我该怎么做才能让

我一直在测试我的应用程序,看看它在由非管理用户运行时工作得如何,我发现了文件处理方面的问题。如果文件是由管理员和管理员用户创建的,则在尝试覆盖文件时,我收到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 );  
对所有文件所在的目录执行上述操作可以解决此问题吗?或者我必须对每个文件做些什么?如果是这样,那是什么

编辑:


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

此代码将授予用户对文件夹的完全访问权限,但是,这可能会再次在安全性方面失败


确保应用程序始终能够存储信息的最佳方法是通过隔离存储。但是,如果您需要访问应用程序外部的文件,则这不是最佳解决方案。

我刚刚检查了“所有用户\应用程序数据”目录上的权限。“用户”和“超级用户”ACL没有“删除子文件夹和文件”权限

他们可以删除自己的文件,因为“创建者所有者”ACL具有完全控制权

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


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

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

有些文件可能需要从应用程序外部进行访问。既然是这样,我该怎么办?您可以尝试使用用户自己的应用程序数据文件夹。默认情况下,他们应该不作为管理员就可以访问它。您可以使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)为用户获取该路径。这意味着用户之间不共享应用程序数据。应用程序数据需要为所有用户共享。这就是我使用“所有用户\应用程序数据”目录的原因。只是当以管理员身份登录时创建的文件不能被非管理员用户修改。在这种情况下,无论何时以管理员身份登录,您编写的上述代码都应该有效。您应该首先检测您是否有权这样做。管理员用户不是问题所在。问题是,非管理员用户无法修改管理员用户创建的文件。这是我所做的,但将答案归功于R.Bemrose,因为我是根据他的答案得出解决方案的。谢谢你。