我有一个安装程序,它在 HKEY_CURRENT_USER 上安装一个密钥。当我运行安装程序时,它只会将它添加到正在安装的用户。有没有办法一次将密钥添加到所有用户?
谢谢
我有一个安装程序,它在 HKEY_CURRENT_USER 上安装一个密钥。当我运行安装程序时,它只会将它添加到正在安装的用户。有没有办法一次将密钥添加到所有用户?
谢谢
您必须通过 下的所有不同用户HKEY_USERS
,这需要提升权限。并且不会捕获任何尚未创建的用户。那只是错误的做法。
这样做的方法是HKLM
在安装时将默认值添加到相应的键中。当您的程序尝试从注册表中读取时,它会HKCU
首先查找,如果您的键不存在,它会将信息从相应的键复制HKLM
到键 in 中HKCU
。
安装程序的一般规则是,它们不应依赖于随后将使用已安装程序的用户运行。当然,在企业设置中,程序通常安装在用户帐户下,该用户帐户将永远不会运行正在安装的程序。
在某些情况下,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
这里会发生什么:
听起来很复杂,但是一旦你弄清楚它就有意义了,而且非常有用。
http://wpkg.org/Adding_Registry_Settings#Adding_entries_to_HKCU_for_all_users
这是我目前在 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\ 下添加的密钥的信息,但直到现在这个过程一直有效。如果我知道为什么这不起作用,我会添加一条注释 - 我目前想知道是否必须通过用户上下文中的策略添加它。
我认为最好的方法是通过 GPO。
创建一个 GPO,该 GPO 将修改HKCU
应用您想要对受该 GPO 影响的用户所做的更改。
以下 Microsoft KB 可能有助于实现这一点:
不,没有办法做到这一点。
在这种情况下考虑一下:您安装了应用程序,然后创建了一个新的用户帐户。在安装过程中如何将注册表项添加到这个新帐户?
或者唯一的方法是当该用户启动您的应用程序时。那就是您的应用程序在第一次启动时创建具有默认值的键。