在没有管理权限的情况下,我可以在哪里放置LOCALMACHINE -Registry以外的常用用户数据

时间:2016-01-21 11:34:17

标签: c# .net windows registration user-data

在注册表-localmachine以外的Windows中,我可以在哪里放置可供所有用户访问的常用用户数据。

我需要这样做没有请求提升管理员权利

2 个答案:

答案 0 :(得分:1)

您可以将其存储在Application data文件夹中。您可以从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();
        }
    }

答案 1 :(得分:1)

默认情况下,没有此类位置可用。常规(,非管理用户)没有必要的权限来处理属于其他用户的系统文件或文件 - 这将是一个安全问题。因此,他们无法写一个普通的" 。目录

如果您需要所有用户都能够写入某种类型的公共区域,则需要自行设置。通常,这是由安装程序应用程序完成的。安装程序应用程序需要请求提升,以便它具有管理权限,以便写入受限文件夹并更改安全权限。如果您使用标准安装程序实用程序,那么这通常是内置功能。如果您自己编写,则可以通过嵌入level设置为requireElevation的清单来安排管理权限(搜索Stack Overflow以获取详细信息)。

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

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