【问题标题】:Add a key to HKEY_CURRENT_USER for all users为所有用户添加一个密钥到 HKEY_CURRENT_USER
【发布时间】:2013-04-25 17:40:10
【问题描述】:

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

谢谢

【问题讨论】:

    标签: .net installation registry


    【解决方案1】:

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

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

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

    【讨论】:

    • 注明。就我而言,我确实在本地机器中找到了一个“等效”的密钥,以便我可以做我需要做的事情,但我仍然想知道是否有办法。
    • “这样做的方法是......” - 可行,但是用这种方法卸载应用程序的正确方法是什么?
    【解决方案2】:

    在某些情况下,主动设置可能是解决方案。

    它通过向 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

    这里发生了什么:

    • 当用户下次登录时,Active Setup 检查注册表项下是否存在值为 1 或更大的字符串 Version HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MapDrive。 没有,因此它创建它,并运行第二个 reg add 命令,该命令在 HKEY_CURRENT_USER\Software\Microsoft\Windows\ 下添加一个值为 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

    【讨论】:

      【解决方案3】:

      这是我目前在 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\ 但直到现在这个过程一直有效。如果我知道为什么这不起作用,我会添加一条注释 - 我目前想知道是否必须通过用户上下文中的策略添加它。

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

        • 不是 OP 提出的问题的一部分,因此此信息没有相关性。
        【解决方案5】:

        不,没有办法。

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


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

        【讨论】:

        • 正如@Evgeny 所说,您至少可以使用Active Setup,所以可以。但是有一些方法可以写入默认用户设置,并且该默认用户拥有的内容将复制给所有新用户。如上所述。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多