代码之家  ›  专栏  ›  技术社区  ›  deem

与厨师一起删除套餐

  •  0
  • deem  · 技术社区  · 9 年前

    你能告诉我,这是可能的吗 删除Java JDK 带有的包装 厨师 具有 windows_package ,或者我必须执行命令以静默卸载?第一个选择会更好。

    我尝试过这样的方式:

    windows_package node['name']['JDK1.6'] do
          action            :remove  
    end  
    

    甚至增加了选项 installer_type :custom ,仍然出现此错误:

    FATAL: Mixlib::ShellOut::ShellCommandFailed: windows_package[Java(TM) SE Development Kit 6 Update 35] (line 4) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0, 42, 127], but received '1603'
    ---- Begin output of MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn ----
    STDOUT: 
    STDERR: 
    ---- End output of MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn ----
    Ran MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn returned 1603
    

    嗯,我没有主意了。在…上 official Opscode site 我找到了以下信息:

    :remove: remove a package. The remove action is completely hit or miss as many application uninstallers do not support a full silent/quiet mode.

    但据我所知,JDK支持静默卸载。

    那么,为了正确卸载软件包,我应该怎么做呢?这是可能的吗?

    非常感谢您的帮助。


    规范:

    • 厨师12.4.1
    • Windows 7
    • Java JDK版本:6u35、7u79、8u45

    如果您需要更多信息,请随时询问。

    3 回复  |  直到 9 年前
        1
  •  1
  •   deem    9 年前

    好吧,我最终得到了自己的实现。对于那些同样需要的人:

    # variable 'code' is for JDK version code from registry.
    # Uninstall comand: MsiExec.exe /quiet /X[CODE]
    # Codes are in regkey HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Be aware to check key for JDK, not JRE!
    
    remove_command = "MsiExec.exe /quiet /X#{code}"
    
    execute "Remove JDK from system" do
            command         remove_command
            returns         [0,1605]  # 1605 for non-existing product error
    end
    

    例如,对于JDK1.6.35(有疑问),代码应该是

    code = '{32A3A4F4-B792-11D6-A78A-00B0D0160350}'
    

    因此,这似乎与厨师使用的命令不同:

    • 由厨师使用

    MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn

    • 此命令

    MsiExec.exe /quiet /X{32A3A4F4-B792-11D6-A78A-00B0D0160350}

    也许有人会觉得这很有用。

        2
  •  0
  •   boyvinall    9 年前

    这看起来可能不是厨师的问题。卸载程序由于某种原因遇到错误。尝试在谷歌上搜索“java安装错误1603”,你会看到一堆帖子,其中一篇显然是目前正在调查的bug https://www.java.com/en/download/help/error_1603.xml -尽管听起来可能是安装而不是卸载。

    尝试手动删除它并进行调试,然后一旦您了解了它,就可以制作它。

        3
  •  0
  •   Nathan    8 年前

    我做了类似于您的回答的事情,但它只需要包名,而不是注册表中的代码。

    execute 'uninstall_jdk8u72' do
      command "wmic product where name=\"#{node[:java8u72][:package_name]}\" call uninstall"
    end
    

    我是从 https://github.com/chef-cookbooks/windows/issues/89