【发布时间】:2013-04-25 17:40:10
【问题描述】:
我有一个安装程序,它在 HKEY_CURRENT_USER 上安装一个密钥。当我运行安装程序时,它只会将它添加到正在安装的用户。有没有办法一次将密钥添加到所有用户?
谢谢
【问题讨论】:
标签: .net installation registry
我有一个安装程序,它在 HKEY_CURRENT_USER 上安装一个密钥。当我运行安装程序时,它只会将它添加到正在安装的用户。有没有办法一次将密钥添加到所有用户?
谢谢
【问题讨论】:
标签: .net installation registry
您必须通过HKEY_USERS 下的所有不同用户,这需要提升权限。并且不会捕获任何尚未创建的用户。那只是错误的方法。
这样做的方法是在安装时将默认值添加到HKLM 下的相应键中。当您的程序尝试从注册表中读取数据时,它会首先查找HKCU,如果您的键不存在,它会将信息从HKLM 中的相应键复制到HKCU 中的键。
安装程序的一般规则是,它们不应依赖于随后将使用已安装程序的用户运行。当然,在公司设置中,程序通常安装在用户帐户下,该用户帐户随后将永远不会运行正在安装的程序。
【讨论】:
在某些情况下,主动设置可能是解决方案。
它通过向 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 添加“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive" /v "版本" /d "1" /t REG_SZ /f
注册添加 “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 键并选择卸载 hive。
现在对于任何新的配置文件,他们都会获得这些密钥。现有的配置文件没有,因此如果您使用预先存在的配置文件登录,您将看不到它的工作。如果要删除配置文件,我发现最干净的方法是右键单击计算机,选择属性,高级系统设置,然后选择用户配置文件下的设置。突出显示您要删除的配置文件并选择删除。
这似乎并不总是有效。我在这里寻找有关为什么这不适用于我尝试添加的键的信息 HKEY_CURRENT_USER\Software\Classes\ 但直到现在这个过程一直有效。如果我知道为什么这不起作用,我会添加一条注释 - 我目前想知道是否必须通过用户上下文中的策略添加它。
【讨论】:
我认为最好的方法是通过 GPO。
创建一个 GPO,该 GPO 将修改 HKCU,将您要对受该 GPO 影响的用户所做的更改应用到。
以下 Microsoft KB 可能有助于实现这一点:
【讨论】:
不,没有办法。
在这种情况下考虑一下:您安装了应用程序,然后创建了一个新的用户帐户。在安装过程中如何向这个新帐户添加注册表项?
或者唯一的方法是当该用户启动您的应用程序时。那就是您的应用程序在第一次启动时使用默认值创建键。
【讨论】: