背景
我的软件通过我们的网络通过组策略进行部署,使用标准的MSI安装程序和一些自定义操作来注册软件实际部署。
这一切都非常简单和标准。它是一个很大的Windows应用程序,所有文件都被转储到应用程序文件夹中,桌面和开始菜单上的所有用户都可以使用快捷方式。每个人都很开心。它像发条一样工作,软件安装GPO让我没有任何问题。重启一次或两次后,可以轻松安装/升级新版本。 这并不总是那么容易,但我已经做到了。
问题
但是在某些情况下,我只想立即发出更新而无需重启。我想知道我是否可以让我的应用程序提供一种简单的方法:
我不希望这会对当前的MSI配置造成太大影响,因为它必须适用于GPO安装。 Firefox没有类似的更新机制吗?
MSI是否足够聪明,知道它们何时已安装?例如,如果我的应用程序确实做了这样的例程,当PC重新启动时,它将忽略GPO部署?如果我然后对下一个版本发布更新,它会卸载我手动安装的版本并用GPO版本覆盖它吗?
我只是敲了一下虚拟机来试试这个,但是知道是否有人有这方面的经验会很高兴。
谢谢!汤姆
答案 0 :(得分:0)
GPO中的更改和更新仅在pc启动和/或登录时执行。 这是你无法改变的。 这限制了GPO安装软件的方式。 实际上它只能在pc启动时才有可能。 请注意,GPO应用了管理帐户。
当用户运行您的应用时,该帐户仅限于用户权限。 这使得无法安装/更改/删除软件。 简单用户无法进行这种管理工作。 请记住,Vista或更高版本的权限和UAC有限。
这些限制迫使您拥有一种以管理员权限运行的安装服务。
Microsoft系统中心配置管理器能够在没有这些GPO重新启动的情况下安装软件。它能够做到这一点,因为它使用了一种服务。
也许您可以切换到SCCM来安装/更新您的软件。
如果你不能,你可以创建一个自己的服务,可以为你的应用程序安装补丁。
在msi中使用正确的升级代码和检查,下次重启时不会覆盖这些更新。
另一种解决方案: 我们正在使用AIP(管理员安装点)。 此AIP通过GPO部署到客户端PC。
我们的软件有一个小包装器,在程序启动时执行。 此包装器检查版本号。如果修补了AIP,则包装器会重新安装我们应用程序的主要组件/功能。
此包装器使用Windows安装程序(COM)-API。 我正在使用ReinstallFeature和/或ReinstallFeature函数,具体取决于FeatureState。