我在哪里可以放置除了没有pipe理权限的LOCALMACHINE -Registry以外的常用用户数据

在除registry之外的其他Windows系统中,我可以在哪里放置可以被所有用户访问的普通用户数据

我需要这样做, 而不要求提升pipe理员权限

Solutions Collecting From Web of "我在哪里可以放置除了没有pipe理权限的LOCALMACHINE -Registry以外的常用用户数据"

您可以将其存储在应用程序数据文件夹中。 你可以从Envorinment得到:

 var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); 

要确定是否可以在没有管理员权限的情况下访问该文件夹,请运行不带管理员权限的Visual Studio,然后查看该代码是否成功执行。

  class Program { static void Main(string[] args) { var folder = Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); var file = Path.Combine(folder, "testfile.txt"); File.WriteAllText(file, " Test Settings"); Console.ReadLine(); } } 

没有这样的位置是默认可用的。 普通( 非管理用户)没有必要的权限来混淆属于其他用户的系统文件或文件 – 这是一个安全问题。 因此,他们将无法写入“公共”目录。

如果您需要所有用户能够写入某种类型的公共区域,则需要自行设置。 一般来说,这由安装程序完成。 安装程序应用程序将需要请求提升,以便它具有管理权限以写入受限制的文件夹并更改安全权限。 如果您使用的是标准安装程序实用程序,那么这通常是一个内置功能。 如果你正在编写你自己的,通过嵌入一个level设置为requireElevation (详细搜索堆栈溢出)来安排它具有管理权限。

安装程序将为您的应用程序使用通用应用程序数据文件夹(.NET世界中的枚举值Environment.SpecialFolder.CommonApplicationData )创建一个子目录。 默认情况下,该子目录当然会继承其父文件夹的限制,因此安装程序还需要在该子目录上显式设置ACL(访问控制列表),以授予所有用户写入权限。 这可以在.NET Framework中使用Directory.SetAccessControl方法完成 。

然后,安装完成后,将不需要管理权限来运行您的应用程序。 应用程序可以保存到自己的通用应用程序数据文件夹的子目录中,安装程序确保所有用户都具有读/写权限。