2

我正在更新一些构建脚本以使用 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 文件。

4

2 回答 2

3

请注意,如果您按照此答案productbuild中所示使用,您可以修改文件以要求重新启动,并且该格式有据可查。这是一个使用示例:distribution.xmlsed

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

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

于 2013-04-26T16:50:13.543 回答
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"
于 2012-06-20T10:11:22.070 回答