Windows 7 - 我在哪里以及如何存储机器用户独立数据?

时间:2009-11-27 01:13:11

标签: windows-7 registry

我有一个在XP下运行的应用程序(32位c ++),我需要适应在Windows 7和Vista下运行。它需要在几个独立于User的位置存储几十个字节的数据。在XP下,我将数据存储在HKEY_LOCAL_MACHINE \ Software下的注册表中。当我在Windows 7上运行应用程序时,注册表项是虚拟化的,每个用户都获得一份单独的数据副本。

非虚拟化注册表似乎是数据的合理位置,但我不知道如何去做。我注意到有很多应用程序实际存储数据;他们是怎么做的?

我也愿意将数据存储在哪里,是否有一些众所周知的全局存储库?我需要一个小文件。

我或多或少地对整个权利/特权业务一无所知,所以任何提示,指示等都非常赞赏。

3 个答案:

答案 0 :(得分:2)

Windows 7的设计目标之一是隔离用户数据和应用程序。这是为了改善隐私,安全性和自定义。实际上,Win 7中的标准用户无法更改其他用户的数据。

System.Environment.SpecialFolder枚举返回存储应用程序数据的标准位置。请注意,并非所有用户都可读取或写入所有文件夹。例如,CommonApplicationData可供所有用户读取,但只能由具有适当策略的用户编写,例如Admins。

如果绝对必须拥有用户之间共享的数据,则管理员或具有权限的管理员必须将其安装到共享位置。如果用户需要更新此数据,则应将其复制到可写入的位置(如ApplicationData),并更新自己的私有副本。其他用户无法更改此私有副本。除非您的应用程序不起作用,否则不应将数据安装到共享位置。

事实上,在Win7中,您应该将所有应用程序和数据安装到登录用户的应用程序和数据文件夹,而不是共享位置。如果多个用户安装了应用程序,则每个用户都将获得自己的应用程序和数据副本。这几乎总是你想要的。如果多个用户正在运行应用程序或游戏,则您不希望一个用户更改其他所有用户。如果多个用户确实需要相同的更改,请让每个用户在需要时更新其私有副本。如果一个用户的帐户遭到黑客攻击或变坏,那么您不希望它破坏其他人的应用程序和数据。

另请注意,在Win7中,用户可以远程登录到计算机,因此用户存储特定于计算机的数据(如屏幕分辨率或IP地址)不是一个好主意。相反,每次应用运行时都要检查一下。

答案 1 :(得分:0)

恕我直言,认为很多人要让个人用户安装自己的软件包副本是不合理的。事实上,除非在ADMIN(ALLUSERS = 1)下完成,否则很多软件包都不会安装。如果不提供低于ADMIN的某些保护级别的系统范围安装的合理方法,则ADMIN级别安装仍将是常态。

例如,为什么不允许某些非ADMIN用户(具有中间权限)安装在注册表的某些受限制部分(HKLM \ SOFTWARE \ package)和所有USERS \ APPLICATION DATA中的目录中创建注册表项包装

我决定使用ADMIN(ALLUSERS = 1).msi并创建具有修改保护的注册表项。

答案 2 :(得分:0)

因此,在我的客户有一个专用工作站的情况下,我们的应用程序(从一个很好的旧INI文件中获取数据,我们将会发送给他们的IT员工)我们的消息是他们需要安装它在每台用户的同一台机器上?

我们需要读取/写入(在Windows 7 / Vista下): Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)+ @“\ GoScan \ GoScan.ini”

但与其他人一样,他们发现典型用户的权限不足以满足r + w。在安装程序完成后或安装期间更改目录/文件权限是否是“可接受的”做法(不确定在VS 2008安装项目中的位置)。

-Paul