15

我有一个安装程序,它在 HKEY_CURRENT_USER 上安装一个密钥。当我运行安装程序时,它只会将它添加到正在安装的用户。有没有办法一次将密钥添加到所有用户?

谢谢

4

5 回答 5

18

您必须通过 下的所有不同用户HKEY_USERS,这需要提升权限。并且不会捕获任何尚未创建的用户。那只是错误的做法。

这样做的方法是HKLM在安装时将默认值添加到相应的键中。当您的程序尝试从注册表中读取时,它会HKCU首先查找,如果您的键不存在,它会将信息从相应的键复制HKLM到键 in 中HKCU

安装程序的一般规则是,它们不应依赖于随后将使用已安装程序的用户运行。当然,在企业设置中,程序通常安装在用户帐户下,该用户帐户将永远不会运行正在安装的程序。

于 2013-04-27T13:53:13.390 回答
12

在某些情况下,Active Setup可能是解决方案。

它通过向HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\%package name%添加一个带有版本号的密钥来工作。当用户登录 Windows 时,会检查此位置并将其与HKCU\SOFTWARE\Microsoft\Active Setup\Installed Components\%package name%进行比较。如果它丢失或版本较低,则它将运行HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\%package name%\StubPath中设置的任何内容。

你可以用这种方式做一些自定义的事情,例如我用它来添加某个脚本(映射网络驱动器)到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 如下方式:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive" /v "Version" /d "1" /t REG_SZ /f

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive" /v "StubPath" /d "reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v "MountDrive" /d "C:\map .cmd" /t REG_DWORD /f" /f

这里会发生什么:

  • 当用户下次登录时,Active Setup 会检查注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive下是否存在值为 1 或更大的字符串 Version 。没有,因此它创建它,并运行第二个 reg add 命令,该命令在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run下添加一个值为C:\map.cmd的字符串
  • 它只发生一次,因为在 Active Setup 上的每个连续日志中都会发现HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive现在有一个版本。

听起来很复杂,但是一旦你弄清楚它就有意义了,而且非常有用。

http://wpkg.org/Adding_Registry_Settings#Adding_entries_to_HKCU_for_all_users

于 2013-07-11T04:53:34.667 回答
2

这是我目前在 Windows 7 中工作的过程

  • 在 regedit 中找到 HKCU 下所需的密钥,将其导出。

  • 现在右键单击 HKEY_USERS 键并选择加载配置单元。浏览到 C:\Users\Default 并选择 NTUSER.DAT。将蜂巢命名为您喜欢的任何名称(例如 NAMEHERE)。

  • 在您导出的 reg 文件中,将 [HKEY_CURRENT_USER\ 的所有实例替换为 [HKEY_USERS\NAMEHERE\ (或您命名配置单元的任何名称)并保存文件

  • 双击reg文件合并它

  • 突出显示 NAMEHERE 键并选择卸载配置单元。

现在,对于任何新的配置文件,他们都会获得这些密钥。现有的配置文件没有,因此如果您使用预先存在的配置文件登录,您将看不到它的工作。如果要删除配置文件,我发现最干净的方法是右键单击计算机,选择属性,高级系统设置,然后选择用户配置文件下的设置。突出显示要删除的配置文件并选择删除。

似乎这并不总是有效。我在这里寻找有关为什么这不适用于我试图在 HKEY_CURRENT_USER\Software\Classes\ 下添加的密钥的信息,但直到现在这个过程一直有效。如果我知道为什么这不起作用,我会添加一条注释 - 我目前想知道是否必须通过用户上下文中的策略添加它。

于 2015-06-09T22:18:14.177 回答
0

我认为最好的方法是通过 GPO。

创建一个 GPO,该 GPO 将修改HKCU应用您想要对受该 GPO 影响的用户所做的更改。

以下 Microsoft KB 可能有助于实现这一点:

http://technet.microsoft.com/en-us/library/bb742499.aspx

于 2014-04-04T13:41:26.123 回答
-3

不,没有办法做到这一点。

在这种情况下考虑一下:您安装了应用程序,然后创建了一个新的用户帐户。在安装过程中如何将注册表项添加到这个新帐户?


或者唯一的方法是当该用户启动您的应用程序时。那就是您的应用程序在第一次启动时创建具有默认值的键。

于 2013-04-27T13:48:46.073 回答