【发布时间】: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 对其进行修改。从某种意义上说它并不安全,但可以说无论你做什么,整个计划都不安全。
标签: windows configuration settings