Windows 7通过注册表在用户之间共享数据

时间:2010-06-15 11:01:14

标签: visual-c++ mfc windows-7 registry

在哪里可以创建/修改/删除注册表项以在Windows 7注册表中的用户之间共享数据?这两个用户都是非管理员,不应该要求管理员权限。

我正在处理的应用程序使用注册表从userA写入密钥,然后userB可以读取/修改/删除它。这两个用户都没有管理员权限,也无法更改此权限。

是否有关于如何在Windows 7中使用注册表的官方MSDN指南?任何描述正确使用注册表的链接都是有用的。

4 个答案:

答案 0 :(得分:2)

如果没有提升,您将无法访问HKLM,因此您无法完成所描述的操作。

我建议以下一些方法: 1.选择其他数据存储,例如。您的所有用户都可以访问的数据库,文件等。 2.创建一个作为LocalSystem运行的Windows服务(提供对HKLM的RW访问),并使您的应用程序通过命名管道/ COM /套接字与服务进行通信。

答案 1 :(得分:0)

注册表用于编写配置设置,而不是用于在用户之间共享数据,您实际上是出于错误的目的使用它。

但是,如果必须的话,注册表中唯一有意义的地方甚至可以在Software\yourapp的HKEY_LOCAL_MACHINE配置单元中,但我很确定那里没有任何地方可以普通用户可以默认写入 如果能够,您可以创建该密钥,然后更改users组的权限,以便他们具有完全访问权限。

This wiki文章可能有助于了解如何最好地使用注册表。

答案 2 :(得分:0)

在Windows 7上,只有以管理员身份运行的应用才能访问HKLM。如果您在应用程序上没有清单,它将虚拟化,这意味着写入不同的每用户存储。

我认为你应该在每个应用程序位置使用一个配置文件,而不是每个用户,比如%PROGRAMDATA%,并让你的setup / install(可能以管理员身份运行)写一个告诉你的位置的密钥这个文件是。然后,非管理员用户可以在使用应用程序时轻松读取和写入文件。

答案 3 :(得分:0)

注册表实际上并不是正确的方法。你能给我们一些关于你真正想做的事情的更多细节吗?

用户是否同时登录?在这种情况下,某种进程间通信(IPC)机制可能会起作用。例如:命名管道,共享内存,套接字等。

如果没有,您是否会一直运行一个进程(即服务)?这可以用作一种投币箱机制。

如果你有一个安装程序,你可以创建一个两个用户都可以访问的目录(为了简单起见,将它们放在同一个组中)。然后你可以在那里删除消息文件。

简而言之:注册表实际上是为长期配置设置而设计的。短期通信确实应该以其他方式完成。