木偶升级微软在Windows上

我在Windows上运行木偶,我想升级一个使用msi安装的软件包(java)。 我使用安装包

package { 'java': ensure => installed, provider => 'msi', source => 'S:\jdk1.6.0_30.msi', install_options => { 'INSTALLDIR' => 'C:\tools\java' }, } 

现在我想升级到31例如,所以我试着运行

 package { 'java': ensure => installed, provider => 'msi', source => 'S:\jdk1.6.0_31.msi', install_options => { 'INSTALLDIR' => 'C:\tools\java' }, } 

这实际上并没有升级,因为已经安装了“java”包。 当我尝试将“确保”值更改为最新时,puppet说提供者types必须具有可升级的function。

这只是一个窗口限制? 有没有办法使用msi包升级现有的Java安装?

这只是一个窗口限制?

与其他软件包提供商相比, MSI提供商似乎非常有限。 这当然不是Windows / MSI的限制。 我相信Windows提供了使这些选项起作用所需的东西。

有没有办法使用msi包升级现有的Java安装?

一种select可能是放弃包msi提供程序,只需使用Exec语句执行所有操作。 msiexec命令有很多选项。

你也许可以想出一个安排事情的方法,这样如果需要升级的话,旧版本会先清除。 然后安装新版本,您可能需要跟踪文件或registry中的版本,因为MSI提供程序不会提供有关版本的任何信息。

用于Puppet的Windows MSI插件不能理解版本。 与Linux软件包pipe理系统不同的是,Puppet并不需要查看哪些版本可用的元数据目录参考。

以下内容是从头开始编写的,未经testing,但会为您提供一种启用升级的方法。 每当你得到一个新的版本,链接它。旧版本可以从列表中删除,当你确定一切都已经升级。

 package { 'java': ensure => absent, provider => 'msi', source => 'S:\jdk1.6.0_30.msi', install_options => { 'INSTALLDIR' => 'C:\tools\java' }, } -> #chaining operator forces uninstall before install package { 'java-1.6.0_31': ensure => installed, provider => 'msi', source => 'S:\jdk1.6.0_31.msi', install_options => { 'INSTALLDIR' => 'C:\tools\java' }, } 

更新: msi提供程序已被可提供versionable的Windows提供程序取代。 现在应该按预期工作。