注意事项

在现代的文件安装包中,安装器仅支持使用preinstall和postinstall两个脚本,其它的仅仅在旧式的应用包安装包中使用,更详细的应用包格式的规范,请参考:PackageMaker How-to

安装包脚本有其特殊性,在编写时需要注意考虑到多种情况,并提供详尽的文档。下面是作者给读者的一些忠告:

  • 不要假设安装包会被安装到当前启动系统中,使用$3或者 DSTVOLUME 来判断安装目标卷宗。在实践中,可以使用“$3”是否等于“/”来判断目标是否是当前启动系统

  • 如果安装目标不是当前启动系统,那么很多命令可能会失去作用,比如systemsetup和networksetup等,它们都是获取或者修改当前启动操作系统的系统和网络设置,而无法获得被安装卷上的非启动系统的参数。再比如:sw_vers只能获得当前操作系统的版本,那么在检测操作系统版本是就不能用这个命令了

  • 不要使用osascript来访问Finder等图形用户环境资源,因为安装包可能被运行自非用户登录状态下,比如登录窗口或者NetInstall中,此时访问Finder只会造成未知错误,这也是造成安装错误的一个原因

  • 只有在必需时,才在安装包中要求使用管理员权限

  • 尽量不要要求,更不要在不通知用户的情况下强制关闭其它软件,这样很可能会造成用户丢失工作数据

  • 在安装系统组件的时候,请提示用户,让用户来选择是否继续。不要不提示或者没有详细的文档说明

  • 负载文件的文件属性,不要在脚本中修改,因为安装器系统维护的安装包的收据库中记录的文件属性是基于安装包中的收据文件的,这个收据文件是在建立安装包时,敷在文件的文件属性匹配的,这就造成数据库与实际文件属性不匹配,当使用修复功能时会造成混乱

  • 如果可能,尽量避免使用脚本

  • 脚本返回值要明确,成功就返回0,出错就返回非0.  尽量详细记录日志,记录脚本每一步的结果和注释,有利于维护和排错

  • 在安装后,如果安装的目的是在用户登陆后再做配置用户信息的操作,那么可以使用如LaunchAgent等手段来实现。

Last updated