在Windows 7上,全局应用程序设置应该存储在哪里?

3
我正在努力让我的产品在Windows 7上无缝运行。问题在于有一小部分全局(非用户特定)应用程序设置,所有用户都应该能够更改。
以前的版本中我使用HKLM\Software\__Company__\__Product__达到这个目的。这允许电源用户和管理员修改注册表键,一切正常。现在Windows Vista和Windows 7默认启用UAC功能,即使是管理员在没有提升权限的情况下也不能写入注册表键。
愚蠢的解决方法当然是将requireAdministrator选项添加到应用程序清单中。但这真的很不专业,因为产品本身与管理相关的任务极为远离。所以我需要保持asInvoker
另一个解决方案可能意味着在需要写入注册表键时进行程序提升。更别说我不知道如何实现了,这也非常尴尬。它会严重干扰正常用户体验,以至于我几乎不认为它是一个可选项。
我知道相对容易实现的另一个方法是在安装过程中添加对指定注册表键的写访问权限。我为此创建了一个单独的问题。这也非常类似于访问共享文件以存储设置。
我的感觉是,必须有一种方法能够以安全、简单和兼容所有操作系统的方式实现我所需要的功能。有什么想法吗?

1
当然,可以提出这样的论点:修改计算机所有用户的设置将被视为行政操作,因此只能在管理员权限下完成 :) 请参见http://msdn.microsoft.com/en-us/library/ms679687%28VS.85%29.aspx以获取有关实现可根据需要提升以执行特定管理任务的COM对象的信息。说实话,您可能会选择共享注册表区域或\ProgramData下的某个位置,这是任何一个好地方。 - tyranid
请问您能否更详细地解释一下 \ProgramData共享注册表区域 是什么? - Kerido
好的,就你计划要做什么而言,可以将位置放在HKLM或C:\ProgramData中,允许任何用户使用特定的ACLs进行修改。从某种意义上说,它不会很安全,但无论你做什么,整个计划都不能算是安全的,这一点可以被争论。 - tyranid
2个回答

0

你必须把它放在注册表里吗?如果不需要,可以将其放入一个简单的文件中,让每个人都可以写入。写入HKLM需要额外的权限,这是有很好的理由的。


你知道C:\Users\Public是否保证每个人都可以写入吗?如果是的话,那可能是一个解决方案! - Kerido
对我来说,但我真的不是那方面的专家。作为一个特例,我也可以想到用户清除该目录中的文件。你不能将全局配置文件存储在程序安装的目录中吗?在那里有一个配置目录/文件也更直观。 - sibidiba
不是这样的。在Users\Public中创建的文件具有可供所有用户读取但只能由管理员和创建者编写的拾取权限。您需要调整目录或注册表键0的ACL,以便在所需的所有用户读/写存储中进行设置。 - Chris Becke

0

我是新来的(否则我会留下评论),也不是Windows专家,但...

在我看来,前提是错误的:

如果非提升用户不能修改所有用户都可以读取的注册表键或目录(例如默认情况下的Users\Public),那么肯定有原因。

我认为,允许任何用户修改一小部分全局应用程序设置可能会破坏其他用户的体验,因为他们没有预料到自己的设置会被修改。

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

请问您能否说明为什么所有用户都应该能够修改这些设置?如果确实需要所有用户都能够这样做...为什么不能将这些设置变成特定于用户的呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接