【问题标题】:Requiring restart in component package using pkgbuild使用 pkgbuild 要求在组件包中重新启动
【发布时间】:2013-04-27 00:50:13
【问题描述】:

我正在更新一些构建脚本以使用 pkgbuild 而不是 PackageMaker,但我没有看到要求重新启动组件包的选项。在 PackageMaker 中,可以使用以下两种方法之一来要求重新启动:

  • (旧版兼容模式)在 Info.plist 中,将 IFPkgFlagRestartAction 设置为 RequiredRestart。
  • 在 PackageInfo 文件中,将 pkg-info>postinstall-action 设置为重新启动。

我没有看到 pkgbuild 或其组件包 plist 的任何类似选项。我知道,当我们使用 productbuild 构建发行版时,我们可以选择使用发行版文件的 pkg-ref>onConclusion 键在每个包的基础上要求重新启动。但这是现在唯一的方法(不使用 PackageMaker)吗?如果是这样,我想知道为什么这个要求被移出组件包并进入依赖于它们的发行版。在我看来,组件包在可以指定自己的要求时仍然更加模块化。

编辑:如果您在生成的 PackageInfo 中设置 postinstall-action="restart" 您可以强制重启。现在的问题是如何教 pkgbuild 自动将其写入 PackageInfo 文件。

【问题讨论】:

    标签: macos package


    【解决方案1】:

    请注意,如果您使用this answer 中所示的productbuild,您可以修改distribution.xml 文件以要求重新启动,格式为well-documented。这是一个使用sed的示例:

    sed -i "" -e 's/onConclusion="None"/onConclusion="RequireRestart"/' distribution.xml
    

    这避免了扩展和展平包,并允许您包含自定义背景、欢迎文本等 :-)

    【讨论】:

      【解决方案2】:

      无法通过参数或component.plist来实现

      因此,我通过 shell 脚本扩展、编辑和展平包来做到这一点:

      #Replace the value of the postinstall-action attribute to restart
      echo "Expanding archive ${BDIR}/${NAME}-Installer.pkg"
      pkgutil --expand "Installer.pkg" installertmp
      
      echo "Replacing postinstall-action \"none\" with \"restart\""
      sed -e 's/postinstall-action=\"none\"/postinstall-action=\"restart\"/' -i '' installertmp/PackageInfo
      
      echo "Flattening archive Installer.pkg"
      pkgutil --flatten installertmp "Installer.pkg"
      
      rm -f -r "installertmp"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多