事先将MSI部署到组策略软件安装

时间:2012-05-10 10:47:35

标签: visual-studio-2010 deployment windows-installer group-policy

背景

我的软件通过我们的网络通过组策略进行部署,使用标准的MSI安装程序和一些自定义操作来注册软件实际部署。

这一切都非常简单和标准。它是一个很大的Windows应用程序,所有文件都被转储到应用程序文件夹中,桌面和开始菜单上的所有用户都可以使用快捷方式。每个人都很开心。它像发条一样工作,软件安装GPO让我没有任何问题。重启一次或两次后,可以轻松安装/升级新版本。 这并不总是那么容易,但我已经做到了。

问题

但是在某些情况下,我只想立即发出更新而无需重启。我想知道我是否可以让我的应用程序提供一种简单的方法:

  1. 关闭
  2. 执行适当的MSI(,它会自动放大向导,我不希望用户必须通过它
  3. 启动应用程序或至少告诉用户重新启动它
  4. 我不希望这会对当前的MSI配置造成太大影响,因为它必须适用于GPO安装。 Firefox没有类似的更新机制吗?

    MSI是否足够聪明,知道它们何时已安装?例如,如果我的应用程序确实做了这样的例程,当PC重新启动时,它将忽略GPO部署?如果我然后对下一个版本发布更新,它会卸载我手动安装的版本并用GPO版本覆盖它吗?

    我只是敲了一下虚拟机来试试这个,但是知道是否有人有这方面的经验会很高兴。

    谢谢!汤姆

1 个答案:

答案 0 :(得分:0)

GPO中的更改和更新仅在pc启动和/或登录时执行。 这是你无法改变的。 这限制了GPO安装软件的方式。 实际上它只能在pc启动时才有可能。 请注意,GPO应用了管理帐户。

当用户运行您的应用时,该帐户仅限于用户权限。 这使得无法安装/更改/删除软件。 简单用户无法进行这种管理工作。 请记住,Vista或更高版本的权限和UAC有限。

这些限制迫使您拥有一种以管理员权限运行的安装服务。

Microsoft系统中心配置管理器能够在没有这些GPO重新启动的情况下安装软件。它能够做到这一点,因为它使用了一种服务。

也许您可以切换到SCCM来安装/更新您的软件。

如果你不能,你可以创建一个自己的服务,可以为你的应用程序安装补丁。

在msi中使用正确的升级代码和检查,下次重启时不会覆盖这些更新。

另一种解决方案: 我们正在使用AIP(管理员安装点)。 此AIP通过GPO部署到客户端PC。

我们的软件有一个小包装器,在程序启动时执行。 此包装器检查版本号。如果修补了AIP,则包装器会重新安装我们应用程序的主要组件/功能。

此包装器使用Windows安装程序(COM)-API。 我正在使用ReinstallFeature和/或ReinstallFeature函数,具体取决于FeatureState。