Windows 7 windows 7-在何处以及如何存储与计算机用户无关的数据?

Windows 7 windows 7-在何处以及如何存储与计算机用户无关的数据?,windows-7,registry,Windows 7,Registry,我有一个在XP下运行的应用程序(32位c++),我需要适应它在Windows7和Vista下运行。它需要在独立于用户的地方存储几十字节的数据。在XP下,我将数据存储在HKEY_LOCAL_MACHINE\软件下的注册表中。当我在Windows7上运行应用程序时,注册表项被虚拟化,每个用户都会获得一份单独的数据副本 非虚拟化的注册表似乎是数据的逻辑位置,但我不知道如何去做。我注意到有很多应用程序实际上都在那里存储数据;他们如何着手这样做 我也愿意将数据存储在其他地方,是否有一些广为人知的全球存储库

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

非虚拟化的注册表似乎是数据的逻辑位置,但我不知道如何去做。我注意到有很多应用程序实际上都在那里存储数据;他们如何着手这样做

我也愿意将数据存储在其他地方,是否有一些广为人知的全球存储库?我只需要一个小文件


我或多或少对整个权利/特权业务一无所知,因此非常感谢任何提示、指示等

Windows 7的设计目标之一是隔离用户数据和应用程序。这是为了提高隐私性、安全性和定制性。事实上,Win7中的标准用户无法更改其他用户的数据

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

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

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


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

IMHO,认为很多人会让个人用户安装自己的软件包是不合理的。事实上,许多软件包只有在ADMIN(alluser=1)下才能安装。如果没有提供合理的方法来促进系统范围内低于管理员级别的安装,管理员级别的安装将仍然是标准

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


我决定创建一个必需的管理员(ALLUSERS=1).msi,并创建具有修改过的保护的注册表项。

因此,在我的客户有一个专用工作站的情况下,我们的应用程序(它从一个好的旧INI文件中派生数据,我们将对其进行r+w)我们向他们的IT员工传达的信息是,他们需要为所有用户在同一台机器上安装它

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

但是像其他人一样,我们发现一个典型用户的权限不足以实现r+w。在安装程序完成后或可能在安装过程中更改目录/文件权限是否是“可接受的”做法(不确定在VS 2008安装项目中在何处执行此操作)


-Paul

您能提供更多关于这些数据的信息吗?它是否在安装过程中写入一次,之后再也不会更改?它会在你的应用程序执行的任何时候改变吗?@Reuben:它目前最初是在第一次执行时创建的,很少更新,可能只有几次。它可以在安装时初始化,但以后必须更新。为什么它需要独立于用户?为什么每个用户都有自己的副本是不好的?好吧,假设这些数据代表了一套关于如何玩游戏的通用规则。@鲁本:我对此有了更多的思考,我可以接受在安装应用程序时创建的两个注册表项,只要它们的值是在创建时由我的代码创建的。该值必须不时更新。更新可能(也可能应该)限于管理员。实际上,《Vista认证指南》中针对需要可写共享数据的情况推荐的方法是,应用程序安装程序在CommonApplicationData下创建一个文件夹,并相应地设置其权限(即世界可写)。。。。也就是说,没有禁止共享可写数据或类似的东西。这并不是故意要做的琐事,但也不是不可能,而且有有效的用例;这不是不可能的,但我支持你不应该这样做的建议;你似乎在说,如果我的家庭成员需要一些许可软件,我应该告诉他们购买自己的拷贝并安装在他们的私人环境中@Dour High Arch&Pavel Minaev:见几天前我对原始问题添加的评论。