创建 MSI 包以通过网络部署注册表项的最佳方法是什么,而不是使用 GPO。
答案1
答案2
我不会使用 MSI 来部署注册表设置。指向系统设置的 MSI 是“不受控制“。MSI 认为它“拥有”该密钥,并将乐于删除或恢复它。以下是一些详细信息:
- 无意卸载:如果您对 MSI 的编写不当,写入设置的组件将不会被标记为永久的,并且如果 MSI 被卸载,它将删除整个注册表项/值。请注意,如果您升级 MSI,重大升级在安装新版本之前可能会或可能不会执行完全卸载(取决于更新的配置方式)。如果重新安装失败,则表示您的注册表项丢失。
- 组策略:工作站上的某些注册表项会定期(大约每 90 分钟)被域控制器命令覆盖 - 因此它们可能会在安装 MSI 后恢复。更多详细信息请点击此处。
- 添加/删除程序 (ARP):此外,这些 MSI 文件会显示在系统的“添加/删除”小程序中,用户可以在其中查看它们并可能卸载它们。您可以通过设置ARP系统组件属性设置为 1。但这只会阻止在添加/删除中显示。仍然可以从命令行或通过脚本自动化或远程管理工具卸载 MSI。
- 清理狂潮:即使您的 MSI 隐藏在 ARP 中,如果您使用 SCCM、Altiris、Unicenter、Tivoli 或类似部署工具,勤奋的管理员和清理狂热可以决定卸载这些“黑客软件包”,如果 MSI 清除了所需的设置,就会造成严重破坏。请记住,MSI 文件通常也会以提升权限(临时管理员权限)运行,因此如果一开始就不怀好意,它们肯定是全副武装且危险的。
- 系统还原:安装 MSI 将触发创建还原点在 PC 上(除非禁用系统还原)。如果您只是写入几个值,这可能会很耗时,而且似乎有些多余。
- 有几种方法可以加快 MSI 安装速度(建议阅读,但请谨慎使用 - 禁用文件成本计算可能没问题,但禁用系统还原很危险)。
- 系统还原是一个麻烦的功能。它似乎有时会清除缓存的 MSI 文件、意外删除某些文件并恢复已删除的文件 - 等等。
周期性自我修复:如果另一个 MSI 包引用相同的注册表项,您可能会遇到周期性自我修复周期在某些情况下。大多数管理员至少见过几次这种情况。如果你不知道从哪里找,就很难修复我在 stackoverflow 上对此写了一个很长的答案:如何调试周期性自我修复(也建议系统管理员阅读)。有关自我修复或“自我修复”的更多信息:
封装干扰:如果你真的运气不好,编写了一个可以修复的 MSI(调用该 MSI),或者甚至只是自我修复(自动发生),那么在某个时候,你可以覆盖/恢复设置已被后续更改所改变。这种情况通常很难调试。不过,您可以在事件日志中找到导致问题的包。它甚至会指定导致问题的组件,但从那里开始需要 MSI 专业知识。斯蒂芬·克鲁格 (Stefan Kruger) 就该主题发表了一篇好文章(微星MVP)。
- 无保证: 与上述类似,您看到系统上安装了 MSI,这通常被视为系统已“修补”的证据。MSI 的存在告诉您安装程序在某个时刻运行过,但您对当前的注册表状态一无所知。
- 香港中文大学: 正如其他人提到的,如果您正在写入的注册表项位于 HKCU 下,则只有在安装 MSI 时相关用户恰好登录时,它们才会被写入。任何其他用户的注册表都不会更新。
活动设置可以在这里提供帮助。ActiveSetup 已基本被弃用,您可以使用登录脚本,但不要使用 MSI。
这些只是我想到的一些问题,当然还有一些我忘记了。
其他答案系统管理员的核心 MSI 信息:
- 如何调试周期性自我修复(重要议题)
- MSI 的企业福利(可能对管理人员有用)
- 如何从 setup.exe 中提取文件(值得任何管理员阅读,可能是旧闻)
- 管理安装的目的(系统管理员的核心 MSI 操作)
- MSI 包中的常见错误(更多适用于开发人员,也适用于系统管理员)
- 如何加速 MSI 安装(仅几个选项)
- 如何使用 ActiveSetup 更新每个用户配置文件(有点危险,但有用)
答案3
您可以随时通过登录脚本添加它,或者编写一个使用 psexec 通过命令行远程部署它的脚本?