我有一个需要为其创建安装程序的应用程序,安装程序需要做的所有事情(除了复制应用程序)就是运行一个不属于应用程序本身的脚本(或可执行文件)。关于我如何做到这一点的任何帮助?我在“要求”选项卡中看到“脚本结果”操作,并且“操作”选项卡中还有“预安装操作”,其中包含“打开文件”操作。这些中的任何一个都可以完成这项工作还是我应该寻找其他地方?
3 回答
这是一个很好的方法
在安装过程中可以启动 7 种类型的脚本:
InstallationCheck: 此脚本在安装过程开始时启动(甚至在身份验证步骤之前)。它可用于检查该软件包是否可以安装在此计算机上。
VolumeCheck: 此脚本在“选择目标”步骤中启动。它用于确定可以在哪个卷上安装 Package。
预检: 此脚本在用户单击“安装”按钮后立即启动。
preinstall / preupgrade: 如果有一个预检脚本,则在预检脚本之后启动此脚本(在单个软件包安装的情况下);否则就在用户单击“安装”按钮之后。
如您所见,这里有两种类型的脚本。preinstall 是在 Package 从未安装时启动的(从 Installer.app 的角度来看),preupgrade 是在 Package 已经安装时启动的。为了确定一个包是否已经安装,Installer.app 正在查看以下目录的内容:/Library/Receipts。如果其中有一个名为 PackageName.pkg 的文件,则该 Package 已经安装,否则为第一次安装。
postinstall / postupgrade: 此脚本在安装包中的文件后启动。请参阅(预安装/预升级)以查看启动了哪一个。
postflight: 此脚本在 postinstall / postupgrade 脚本之后或已安装软件包时启动。
我刚刚设法在我用 PackageMaker 制作的包中包含了一个 Shell 脚本。我需要在安装后将我的应用程序添加到登录项中,所以我制作了一个名为的脚本postflight.sh
并将其放入文件夹中。(似乎它适用于任何位置)
然后在我的包中,我有应用程序。在 Contents,Package:Applications 中,在 Scripts 选项卡中,我选择postflight.sh
in Postflight 部分。就是这样。
我的postflight.sh
开始
#!/bin/bash
然后它有一些脚本将应用程序放入登录项。当我没有那个时,我可以制作包,但安装失败。希望这会有所帮助。
这篇PackageMaker How-To文章已经过时了,但它提供了一些关于脚本的非常有用的信息,大约在一半的时候。查找显示从 shell 和 perl 中看到的命令行变量的表,以及一些有用的退出状态值。