我的应用程序需要将一些信息写入文件并保持机器通用(所有用户通用)。
目前我将它存储在C:\Documents and Settings\All Users\Application Data
但问题是每当管理员创建文件时,所有其他用户都没有写入权限。
但是我想要所有用户对该文件的写权限,以便所有用户都可以修改其中的数据。任何人都可以帮助我吗?
编辑:我想要一个存储所有用户通用的 xml 文件。
谢谢
我的应用程序需要将一些信息写入文件并保持机器通用(所有用户通用)。
目前我将它存储在C:\Documents and Settings\All Users\Application Data
但问题是每当管理员创建文件时,所有其他用户都没有写入权限。
但是我想要所有用户对该文件的写权限,以便所有用户都可以修改其中的数据。任何人都可以帮助我吗?
编辑:我想要一个存储所有用户通用的 xml 文件。
谢谢
我建议你研究File.SetAccessControl()
方法和FileSecurity
课程。特别是,该FileSecurity
文档提供了修改给定文件的文件访问控制列表(权限集)的完整示例。这是该示例的简化版本,它授予每个人对以下内容的读写权限C:\TEMP\junk.txt
:
using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
class WorldWrite
{
static void Main()
{
string filename = @"C:\TEMP\junk.txt";
if (!File.Exists(filename)) {
Console.WriteLine("No such file " + filename);
return;
}
/* Get the previous ACL, add a rule to give everyone read
* and write permission, and write back the resulting ACL. */
FileSecurity fileACLs = File.GetAccessControl(filename);
fileACLs.AddAccessRule(new FileSystemAccessRule(
// For everyone
new SecurityIdentifier (
WellKnownSidType.WorldSid,
null /* domain SID; ignored for Everyone */
),
// Allow read and write (of data and metadata),
// but not delete or execute
FileSystemRights.Read | FileSystemRights.Write,
AccessControlType.Allow
));
File.SetAccessControl(filename, fileACLs);
Console.WriteLine("Success!");
}
}
我还关心您如何指定共享应用程序数据目录。如果您对 name 进行硬编码C:\Documents and Settings\All Users\Application Data
,那么您的代码将无法在非英语版本的 Windows、Vista 或 Windows 7 上运行。最好使用SpecialFolder
枚举来找到要使用的正确目录。
注册表对您来说是个好地方吗?(取决于您要存储的内容)。您可以在 HKLM 配置单元上创建一个节点,供所有用户访问
如果您使用 ClickOnce 部署,这将很难做到,因为您必须提升权限才能读取/写入公共文件夹,而 ClickOnce 应用程序不会这样做。
您可以创建一个小的 exe 文件来执行您想要的操作,并让 clickonce 应用程序调用它并让它提升权限。那是你唯一的选择。