无法在“所有用户”下修改文件.在windows 7中使用c#编程

本文关键字:windows 文件 编程 修改 用户 所有用户 | 更新日期: 2023-09-27 18:16:43

这是我的场景,

我有一个Outlook插件,我通过这个插件将一些信息写入一个公共文件。当我创建一个可安装程序时,我将通用文件保存在"所有用户"(通用应用程序数据文件夹)文件夹下。当我在XP上安装这个插件时,它工作得很好,没有权限问题。

现在,当我移动这个应用程序到Windows 7,我得到一些文件访问权限异常。参考一些博客,我在"所有用户"下添加了特定于应用程序的文件夹。在此之后,我也无法写入此文件。

还有什么我需要做的,这样我才能写进这个文件吗?

我读过一些关于UAC的博客,但是,我不清楚它在Add-in中的使用。

无法在“所有用户”下修改文件.在windows 7中使用c#编程

默认情况下,标准用户没有对通用应用程序数据文件夹的写访问权限。如果希望允许用户在那里写入,则应该创建子文件夹并应用适当的ACL。请将此操作作为安装的一部分,因为此时您才有足够的权限创建ACL。

另一个选择是基于每个用户存储这些设置,从而避免安全问题。

为了给文件添加特定的权限,我使用了我为此创建的辅助扩展函数:(您需要在文件上执行此操作的权限)

public static void AddAccessEveryone(this FileInfo file, FileSystemRights rights, AccessControlType accessType)
{
    FileSecurity access = file.GetAccessControl();
    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
    access.AddAccessRule(new FileSystemAccessRule(everyone, rights, accessType));
    file.SetAccessControl(access);
}

你这样称呼它:

file.AddAccessEveryone(FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow);

您必须将引用System.ServiceModel添加到您的项目中。您还必须在文件创建之后调用它,在此之前调用它没有任何好处。