所有用户在同一台​​PC上的可写文件夹

时间:2010-04-14 09:27:53

标签: .net windows security

我有一个使用嵌入式数据库(SQLite)的桌面.NET WPF应用程序。 在哪里放数据库文件?它是所有用户的相同数据库。

我尝试使用CommonAppData,但非管理员用户无法写入。因此,我尝试使用自定义安装程序操作为该文件夹的所有用户提供写入权限,但在域PC上失败。代码是:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyAppName");

DirectorySecurity security = Directory.GetAccessControl(appDataPath);
FileSystemAccessRule rule = new FileSystemAccessRule("Users", FileSystemRights.WriteData, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow);
security.AddAccessRule(rule);   
Directory.SetAccessControl(appDataPath, security);

“。用户”的“。用户”是否会在域上工作?

这是最好的方法吗?我还可以使用其他文件夹吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,您无法使用任何文件夹。您需要调整目录的ACL,否则默认权限仅包括文件所有者(创建者)以外的用户的读访问权。

通常你拥有自己创建的目录的所有权利 - 所以我的方法是在ProgramData文件夹中创建一个应用程序子文件夹,然后,作为新对象的所有者(通过创建),我可以完全控制它并且可以将我的所有用户完全访问权限添加为可继承的访问控制条目。

我还遇到了使用Windows API的“用户”问题,不得不切换到使用众所周知的sid。在德国系统上测试至少“用户”字符串是完全不同的。