0

背景

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

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

问题

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

  1. 倒闭
  2. 执行适当的 MSI(它会自动放大向导,我不希望用户必须通过它
  3. 启动应用程序或至少告诉用户重新启动它

我不希望这过多地影响当前的 MSI 配置,因为它必须通过 GPO 安装工作。火狐没有类似的更新机制吗?

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

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

谢谢!汤姆

4

1 回答 1

0

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

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

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

Microsoft 系统中心配置管理器无需重新启动 GPO 即可安装软件。它能够做到这一点,因为它使用了一项服务。

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

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

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

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

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

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

于 2012-05-10T12:01:10.187 回答