用于 reg 部署的 MSI 包

Edd*_*ddy 4 deployment msi windows-registry

创建 MSI 包以通过网络部署注册表项而不是使用 GPO 的最佳方法是什么。

Ste*_*mul 9

我不会使用 MSI 来部署注册表设置。指向系统设置的 MSI 是“松散的大炮”。MSI 认为它“拥有”密钥,并且会很高兴地删除或恢复它。以下是一些细节:

  • 无意卸载:如果您对 MSI 的编写不当,则写入设置的组件将不会被标记为永久,并且如果 MSI 被卸载,它将删除整个注册表项/值。请注意,如果您升级 MSI,则在安装新版本之前,主要升级可能会或可能不会执行完全卸载(取决于更新的配置方式)。如果重新安装失败,则您的注册表项丢失。
  • 组策略:工作站上的某些注册表项会被域控制器命令定期(每 90 分钟左右)覆盖 - 因此它们可能会在您的 MSI 安装后恢复。一些进一步的细节在这里
  • 添加/删除程序 (ARP):此外,您会在系统上的添加/删除小程序中看到这些 MSI 文件,用户可以在其中看到它们并可能卸载它们。您可以通过将ARPSYSTEMCOMPONENT属性设置为 1 来在此视图中隐藏您的 MSI。不过,这只会阻止在添加/删除中显示。仍然可以从命令行或通过脚本自动化或远程管理工具卸载 MSI。
  • Cleanup Mania:即使您的 MSI 隐藏在 ARP 中,如果您使用的是 SCCM、Altiris、Unicenter、Tivoli 或类似的部署工具,具有清理狂热勤奋管理员可能会决定卸载这些“黑客包”并造成严重破坏如果 MSI 擦除所需的设置。请记住,MSI 文件通常也会运行提升(临时管理员权限),因此如果一开始就没有好处,它们肯定是武装和危险的。
  • 系统还原:安装 MSI 将触发在 PC 上创建还原点(除非禁用系统还原)。如果您只是编写几个值,这可能会很耗时,而且似乎过多。
  • 循环自我修复:如果另一个 MSI 包引用相同的注册表项,在某些情况下您可能会遇到循环自我修复循环。大多数管理员至少见过几次。如果你不知道去哪里找就很难修复。我在stackoverflow上为此写了一个很长的答案:如何调试循环自我修复(推荐系统管理员阅读)。更多关于自我修复或“自我修复”的信息:

  • 包干扰:如果您真的很不走运并且编写了一个可以修复的 MSI - 被调用 - 甚至只是自我修复 - 这会自动发生 - 在某些时候,您可以覆盖/恢复已被后续更改更​​改的设置。这种场景通常很难调试。不过,您可以在事件日志中找到导致问题的包。它甚至指定了导致问​​题的组件,但从那里开始需要 MSI 的专业知识。Stefan Kruger ( MSI MVP )关于这个主题的好文章

  • 无保证:与上述类似,您看到系统上安装了 MSI 这一事实通常被视为系统已“修补”的证据。MSI 的存在告诉您安装程序曾经运行过,但您对当前的注册表状态一无所知。
  • HKCU:正如其他人提到的,如果您正在编写的注册表项在 HKCU 下,则只有在安装 MSI 时有问题的用户碰巧登录时才会写入它们。任何其他用户都不会更新他们的注册表。ActiveSetup可以在这里提供帮助. ActiveSetup 在很大程度上已被弃用,您可以使用登录脚本,但不要使用 MSI。

这些只是我头脑中的一些问题,我当然忘记了一些。

为系统管理员提供核心 MSI 信息的其他答案: