Windows 7和8中的系统范围设置 - 注册表不再有用吗?

时间:2013-04-05 21:03:16

标签: c# windows windows-8 registry uac

我想在目标机器上跟踪系统范围内的设置 - 它是一个运行时计数器,用于跟踪客户端运行软件的次数。我决定将这个值放在注册表中,但我真的想跟踪它为整个系统运行的次数,而不仅仅是当前用户帐户。

我希望使用HKLM在机器级别跟踪这一情况,但UAC现在不喜欢这样。

是否有正确的方法来读取和编写机器范围内的设置?

2 个答案:

答案 0 :(得分:3)

HKLM不适用于此类用途(至少从Windows XP开始)。

使用%PROGRAMDATA%文件夹(您也可以通过Win {{{}} SHGetKnownFolderPathFOLDERID_ProgramData在{ Vista)。它专为应用程序数据而设计,对于机器的所有用户都是全局的。(在Windows 7上,默认情况下这是CSIDL_APPDATA文件夹。)您的应用程序应在其下创建一个目录并存储计数器信息而是在该位置的文件中。

(这也意味着您不必通过允许在不适当的位置对注册表进行公共写入访问来破坏UAC的目的。)

答案 1 :(得分:1)

来自Environment.SpecialFolder Enumeration

CommonApplicationData用作所有用户使用的特定于应用程序的数据的公共存储库的目录。

在安装程序中创建“CommonApplicationData \ Your Company Name \ Your Product Name”文件夹,并更改文件夹的ACL以允许有限的用户完全控制权限(继承权限仅限受限用户使用)。您可以通过LockPermissions MSI表执行此操作,或者如果您的安装程序不支持LockPermissions,则创建自定义操作以更改ACL。

您还需要处理快速用户切换所产生的潜在编辑冲突。