无法使用C#编程修改Windows 7中“所有用户”文件夹下的文件

时间:2011-12-05 05:42:34

标签: c# windows-7 file-manipulation

这是我的方案,

我有一个Outlook加载项,我通过这个加载项将一些信息写入一个公共文件。当我创建一个可安装的时,我将公共文件保存在“所有用户”(Common Application Data Folder)文件夹下。当我在XP上安装这个加载项时,它工作得非常好,没有许可问题。

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

还有什么我需要做的,通过它我可以写入此文件。

我已经阅读了一些关于UAC的博客,但是,我没有清楚地了解它对外接程序的使用。

2 个答案:

答案 0 :(得分:1)

默认情况下,标准用户没有对公共应用程序数据文件夹的写入权限。如果您希望允许用户在那里写,您应该创建一个子文件夹并应用适当的ACL。这是安装的一部分,因为那时您有足够的权限来创建ACL。

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

答案 1 :(得分:0)

要为文件添加特定权限,我使用我为此创建的帮助扩展函数:(您需要正确的权限才能对文件执行此操作)

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添加到项目中。你必须在创建文件后调用它,在此之前调用它没有任何好处。