全局应用程序设置应存储在 Windows 7 的啥位置?

Posted

技术标签:

【中文标题】全局应用程序设置应存储在 Windows 7 的啥位置?【英文标题】:Where should global Application Settings be stored on Windows 7?全局应用程序设置应存储在 Windows 7 的什么位置? 【发布时间】:2011-01-27 03:46:43 【问题描述】:

我正在努力使我的产品在 Windows 7 上无缝运行。问题是有一小部分全局(非用户特定)应用程序设置所有用户都应该能够更改。

在以前的版本中,我为此使用了HKLM\Software\__Company__\__Product__。这允许高级用户和管理员修改注册表项并且一切正常。现在 Windows Vista 和 Windows 7 都有这个 UAC 功能,默认情况下,即使是管理员也无法在没有 elevation 的情况下访问 Key 进行写入。

当然,一个愚蠢的解决方案意味着将requireAdministrator 选项添加到应用程序清单中。但这真的很不专业,因为产品本身与管理相关的任务相去甚远。所以我需要留在asInvoker

另一种解决方案可能意味着在需要对注册表项进行写访问时程序化提升。更不用说我不知道​​如何实现这一点,这也很尴尬。它严重干扰了正常的用户体验,以至于我几乎不会考虑使用它。

我知道应该相对容易完成的是在安装过程中添加对指定注册表项的写入权限。我为此创建了一个separate question。这也非常类似于访问用于存储设置的共享文件。

我的感觉是,必须有一种方法来完成我所需要的,以一种安全、直接且与所有操作系统兼容的方式。有什么想法吗?

【问题讨论】:

当然可以提出这样的论点,即为计算机的所有用户修改某物的设置无论如何都将被视为管理操作,并且只能使用管理员权限来完成:) 有关实现 COM 对象的信息,请参阅msdn.microsoft.com/en-us/library/ms679687%28VS.85%29.aspx,该对象可以按需提升以执行特定的管理任务。 Tbh 你也可以只拥有一个共享的注册表区域或 \ProgramData 下的某个地方,就像任何地方一样。 您能否进一步说明一下\ProgramData共享注册表区域 正如您计划的那样,在 HKLM 或 C:\ProgramData 中放置一个位置,允许任何用户使用特定的 ACL 对其进行修改。从某种意义上说它并不安全,但可以说无论你做什么,整个计划都不安全。 【参考方案1】:

您必须将其保存在注册表中吗?如果没有,把它放到一个简单的文件中,每个人都可以写。写信给 HKLM 需要额外的权限是有充分理由的。

【讨论】:

你知道 C:\Users\Public 是否保证每个人都可以写吗?如果是,那可能是一个解决方案! 在我看来,但我真的不是这方面的专家。作为一个极端情况,我还可以考虑用户清除该目录中的文件。您不能将全局配置文件存储在程序安装到的目录中吗?那里有一个配置目录/文件也会更直观。 不,不是。在 Users\Public 拾取权限中创建的文件意味着它们可供所有用户读取,但可由管理员和创建者写入。您需要调整目录的 ACL,或者您希望所有用户读/写存储的注册表项 0。 ***.com/questions/690780/…【参考方案2】:

我是新来这里的(否则我会留下评论)而且我不是 Windows 大师,但是...

前提是错误的:

如果非提升用户无法修改所有用户读取的注册表项或目录(如默认情况下的 Users\Public),这是有原因的

我认为允许任何用户修改一小组全局应用程序设置可能会破坏其他用户的体验,因为他们不希望自己的设置被修改

另一方面,我不知道您的用例...

您能否具体说明为什么所有用户都应该能够修改这些设置? 如果确实所有用户都必须能够做到这一点......为什么不能让这些设置针对用户?

【讨论】:

以上是关于全局应用程序设置应存储在 Windows 7 的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中static定义的变量 存储在OS内存的啥区域?

在小程序的其他JS文件中均可以使用全局的啥方法获取小程序实例

用户的 Subversion 配置文件存储在主要操作系统的啥位置?

环境变量存储在 Windows 注册表中的啥位置?

参数变量存储在内存中的啥位置?

常量变量存储在 C 中的啥位置?