我有一个由具有提升用户权限的用户安装在Vista PC上的应用程序(以及管理员通过UAC提升提示)。
安装程序会将一些文件写入%APPDATA%文件夹中的文件夹。
当用户(没有提升的用户权限)运行应用程序时,共享%APPDATA%(Vista中的c:\ ProgramData)中的文件(和创建的文件夹)不可访问。
文件由第三方组件编写。如果在没有提升用户权限的情况下使用该组件,则文件可以访问(和可写)。
我试图在没有运气的情况下更改文件的访问权限。
有没有办法让文件默认访问权限完全控制每个人?
答案 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权限。也许你所尝试的不起作用的代码片段可以帮助我们帮助你。