MSI包注册部署

创buildMSI程序包以通过networking部署registry项的最佳方法是什么,而不是使用GPO。

有很多工具可以用来构buildMSI。 我更喜欢高级安装程序 ,这是一个免费版本。 高级安装程序允许您手动inputregistry项/值,或从文件或实时registry导入它们。 使用起来相当简单。

或者,如果您不需要 MSI,则可以使用Windows实用程序reg.exe轻松地从命令行操作registry。 这可以使用psexec等工具远程完成。

我不会使用MSI部署registry设置。 指向系统设置的MSI是一个“ 松散的大炮 ”。 MSI认为它拥有“钥匙”,并将触发快乐的移除或恢复。 这里有一些细节:

  • 如果您严重创作MSI,写入设置的组件将不会被标记为永久性,并且如果MSI被卸载,则会将整个registry项/值取出。 请注意,如果升级MSI,则在安装新版本之前, 主要升级可能会或可能不会执行完全卸载(取决于更新的configuration方式)。 如果重新安装然后失败您的registry项丢失。
  • 此外,您可以在系统上的“添加/删除”小程序中显示这些MSI文件,用户可以在其中看到这些文件并可能将其卸载。 您可以通过将ARPSYSTEMCOMPONENT属性设置为1来隐藏您的MSI。这只会阻止添加/删除显示。 MSI仍然可以从命令行卸载,或通过脚本自动化或远程pipe理工具卸载。
  • 即使您的MSI隐藏在ARP中,如果您正在使用诸如SCCM,Altiris,Unicenter,Tivoli或类似的部署工具,具有清理狂dilligentpipe理员也可以决定卸载这些“hack软件包”,并在MSI湿巾需要设置。 请记住,MSI文件通常也会提升(临时pipe理员权限),所以如果一开始就没有任何好处,它们肯定是武装的,也是危险的。
  • 安装MSI将触发在PC上创build还原点 (除非系统还原被禁用)。 如果你只是写了一些值,这可能会很耗时,看起来过多。 有许多方法可以加快MSI安装 (build议读取,但谨慎使用 – 禁用文件成本可以,禁用系统恢复是危险的)。
  • 如果另一个MSI软件包引用相同的registry项,则在某些情况下可能会遇到周期性的自我修复周期 。 大多数pipe理员至less看过几次。 很难解决,如果你不知道在哪里看 。 我已经写了一个很长的回答这个在stackoverflow: 如何debugging周期性自我修复 (build议阅读以及系统pipe理员)。
  • 如果您真的不走运并且编写可能会在某个时间自行修复的MSI,则可以覆盖/还原后续更改已更改的设置 。 这种情况往往很难debugging。 虽然您可以在事件日志中find导致问题的软件包。 它甚至指定了哪个组件导致了这个问题,但是从那里出发需要MSI的专业知识。 关于这个问题的好文章来自Stefan KrugerMSI MVP )。
  • 与上面类似,您在系统上安装MSI的事实常常被视为系统“修补”的证据。 MSI的存在告诉你,安装程序运行在一个点上,但是你对当前registry状态一无所知。
  • 正如其他人所提到的,如果您正在编写的registry项在HKCU下,那么只有在MSI安装时恰好有问题的用户login时才会写入。 任何其他用户将不会更新其registry。 ActiveSetup可以在这里帮助。

那些只是我头顶的几个问题,我当然已经忘记了一些。

有关系统pipe理员的核心MSI信息的其他答案:

  • 如何debugging周期性自我修复 (重要主题)
  • MSI的公司利益 (可能对pipe理人员有用)
  • 如何从setup.exe中提取文件 (值得一读任何pipe理员,可能是旧的消息)
  • pipe理安装的目的 (系统pipe理员的核心MSI操作)
  • MSI软件包中的常见错误 (更多用于开发人员,也用于系统pipe理员)
  • 如何加快MSI安装 (只是几个选项)
  • 如何使用ActiveSetup更新每个用户configuration文件 (有点危险,但有用)

您可以随时通过login脚本添加它,或者鞭打一个使用psexec通过命令行远程部署它的脚本?