这是我的场景,
我有一个Outlook插件,我通过这个插件将一些信息写入一个公共文件。当我创建一个可安装程序时,我将通用文件保存在"所有用户"(通用应用程序数据文件夹)文件夹下。当我在XP上安装这个插件时,它工作得很好,没有权限问题。
现在,当我移动这个应用程序到Windows 7,我得到一些文件访问权限异常。参考一些博客,我在"所有用户"下添加了特定于应用程序的文件夹。在此之后,我也无法写入此文件。
还有什么我需要做的,这样我才能写进这个文件吗?
我读过一些关于UAC的博客,但是,我不清楚它在Add-in中的使用。
默认情况下,标准用户没有对通用应用程序数据文件夹的写访问权限。如果希望允许用户在那里写入,则应该创建子文件夹并应用适当的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
添加到您的项目中。您还必须在文件创建之后调用它,在此之前调用它没有任何好处。