我可以在哪里放置除 LOCALMACHINE 以外的常见用户数据 - 没有管理权限的注册表

Posted

技术标签:

【中文标题】我可以在哪里放置除 LOCALMACHINE 以外的常见用户数据 - 没有管理权限的注册表【英文标题】:Where can i place common user data other than LOCALMACHINE -Registry without Administrative Rights 【发布时间】:2016-01-21 11:34:17 【问题描述】:

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

我需要这样做无需请求提升管理员权限

【问题讨论】:

***.com/questions/4514929/… 只要数据不是太大,可以考虑隔离存储 @Micky 它只是一些许可数据。我认为除了创建具有管理员权限的新程序之外,没有办法写入local machine 注册表。我的应用程序现在不需要管理员权限。跨度> 这就是隔离存储的好处,它为您提供了一种统一和抽象的方式来写入用户;机器;部件;应用程序 或其组合,以便用户或用户组可以读取/写入数据,而不会遇到安全问题或真正关心 它将被存储在哪里。它只是工作:) @Micky 没有管理员权限也可以工作吗? 【参考方案1】:

您可以将其存储在应用程序数据文件夹中。您可以从 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();
        
    

【讨论】:

但我在 SO 上的某处读到,写入此文件夹需要管理员权限 ***.com/questions/10507233/… 啊哈,真的。 Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); 不需要管理员权限。 这个文件夹在哪里? 取决于操作系统版本。可以是C:\Documents and Settings\All Users\DocumentsC:\Users\Public。它对应于%ALLUSERSPROFILE%\Documents【参考方案2】:

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

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

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

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

【讨论】:

嗯,答案的排序顺序发生了变化,所以我不确定你说的是哪个答案。 Jvanrhyn 的回答是正确的。您将希望创建一个公共文件夹的子目录,例如SpecialFolder.CommonDocuments,但如果没有管理权限,您将无法在其中写入。所以这就是为什么你需要安装程序跳舞。或者在您的应用程序首次运行时按需提升。如果您在谈论 Micky 的回答,关于隔离存储,我真的不知道它是如何工作的。

以上是关于我可以在哪里放置除 LOCALMACHINE 以外的常见用户数据 - 没有管理权限的注册表的主要内容,如果未能解决你的问题,请参考以下文章

iOS 文件路径及数据保存

FirstOrDefault:除 null 以外的默认值

您是不是可以在不产生冲突的情况下恢复除最后一次以外的提交?

DataGrid - 折叠除第一个组以外的所有组

WordPress 给我的 404 页面找不到除主页以外的所有页面

UITableView 重新加载除一个以外的所有单元格