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

C# Windows 7和8中的系统范围设置-注册表不再有用?,c#,windows,windows-8,registry,uac,C#,Windows,Windows 8,Registry,Uac,我想在目标机器上跟踪系统范围内的设置-它是一个运行时计数器,用于跟踪我的客户机运行我的软件的次数。我决定把这个值放在注册表中,但我真的想跟踪它在整个系统中运行了多少次,而不仅仅是在当前用户帐户中 我希望使用HKLM在机器级别跟踪这一点,但UAC现在不喜欢这样 是否有正确的方法读取和写入计算机范围内的设置?HKLM不适用于这种类型的使用(至少从Windows XP开始) 改为使用%PROGRAMDATA%文件夹(也可以通过WinAPI函数使用FOLDERID\u PROGRAMDATA(在Vist

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

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


是否有正确的方法读取和写入计算机范围内的设置?

HKLM
不适用于这种类型的使用(至少从Windows XP开始)

改为使用
%PROGRAMDATA%
文件夹(也可以通过WinAPI函数使用
FOLDERID\u PROGRAMDATA
(在Vista之前的Windows版本上使用
CSIDL\u APPDATA
)来获取该文件夹)。该文件夹专为机器所有用户全局使用的应用程序数据而设计。(在Windows 7上,默认情况下,这是
C:\ProgramData
文件夹。)您的应用程序应该在下面创建一个目录,并将计数器信息存储在该位置的文件中


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

HKLM
不适用于这种类型的使用(至少从Windows XP开始)

改为使用
%PROGRAMDATA%
文件夹(也可以通过WinAPI函数使用
FOLDERID\u PROGRAMDATA
(在Vista之前的Windows版本上使用
CSIDL\u APPDATA
)来获取该文件夹)。该文件夹专为机器所有用户全局使用的应用程序数据而设计。(在Windows 7上,默认情况下,这是
C:\ProgramData
文件夹。)您的应用程序应该在下面创建一个目录,并将计数器信息存储在该位置的文件中

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

来自:

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

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

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

来自:

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

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


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

HKCU应该可以工作,但这是在用户帐户级别跟踪的,对吗?您的安装程序应该调整HKLM\SOFTWARE\Answery键上的权限,以便每个人都可以对其进行写入。这并不严重,但如果10+表示“现在”对你来说,奇怪的是你在1000年的生活中没有学到一切:)。这是自Windows XP以来的行为(实际上是从NT开始的,但它不适用于主流情况)-用户帐户可以写入HKLM…HKCU应该可以工作,但这是在用户帐户级别跟踪的,对吗?您的安装程序应该调整HKLM\SOFTWARE\Anywhere键的权限,以便每个人都可以对其进行写入。不严重,但如果10+表示“现在”对你来说,奇怪的是你在1000年的生活中没有学到一切:)。这是自Windows XP以来的行为(实际上是从NT开始的,但它不适用于主流情况)-用户帐户可以写入HKLM。。。