文件和目录的默认访问权限

时间:2010-09-07 21:07:47

标签: c# .net uac

我有一个由具有提升用户权限的用户安装在Vista PC上的应用程序(以及管理员通过UAC提升提示)。

安装程序会将一些文件写入%APPDATA%文件夹中的文件夹。

当用户(没有提升的用户权限)运行应用程序时,共享%APPDATA%(Vista中的c:\ ProgramData)中的文件(和创建的文件夹)不可访问。

文件由第三方组件编写。如果在没有提升用户权限的情况下使用该组件,则文件可以访问(和可写)。

我试图在没有运气的情况下更改文件的访问权限。

有没有办法让文件默认访问权限完全控制每个人?

2 个答案:

答案 0 :(得分:2)

我通过使用描述here

的方法创建一个子文件夹i c:\ ProgramData解决了这个问题
bool modified;
DirectoryInfo directoryInfo = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyFolder");
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
FileSystemAccessRule rule = new FileSystemAccessRule(
    securityIdentifier,
    FileSystemRights.Write |
    FileSystemRights.ReadAndExecute |
    FileSystemRights.Modify,
    InheritanceFlags.ContainerInherit |
    InheritanceFlags.ObjectInherit,
    PropagationFlags.InheritOnly,
    AccessControlType.Allow);
directorySecurity.ModifyAccessRule(AccessControlModification.Add, rule, out modified);
directoryInfo.SetAccessControl(directorySecurity);

规则由子文件夹和文件继承。 “MyFolder”中创建的所有文件和文件夹都可写入Users组。

答案 1 :(得分:0)

首先,您确定您的安装程序正在为所有用户设置AppData,而不仅仅是一个用户吗?如果安装程序在一个用户的AppData文件夹下生成文件夹,那么一般来说系统拥有多少权限并不重要,除非您是该用户,否则无法访问该文件夹。

其次,听起来您的安装程序代表执行安装的用户编写文件夹和/或文件,这将是一个管理员,因此需要提升权限。有一种方法可以获取和更改文件夹和/或文件的ACL权限。也许你所尝试的不起作用的代码片段可以帮助我们帮助你。