我正在编写基本上是许多平台上的安装程序服务的前端。我(显然)想知道的一件事是安装是否成功。在大多数平台上,这很简单:只需检查安装程序的返回代码/退出代码即可。但是,它在Mac上并不那么容易(使用/usr/sbin/installer
),因为它总是退出0,你必须解析输出(在提供-verboseR
选项之后)以确定它是否有成功或失败。
我只是通过反复试验来解决这个问题,但我发现很难设计自己的软件包,比如说,破坏了,以便弄清楚当软件包以某种方式被破坏时系统会说些什么。
所以我问,亲爱的Lazyweb:是否有一个规范的解析器用于/usr/sbin/installer -verboseR
的输出,或者至少是一个描述它输出的东西的指南?我找到this,这有帮助,但不会让我一直到那里。必须有更好的东西;这似乎是一项普遍的任务。
答案 0 :(得分:4)
你所追求的是一种可能但又没有真正记录在这里:http://lists.apple.com/archives/installer-dev/2006/Aug/msg00029.html 并在此处实施:http://glimmerblocker.org/browser/trunk/NotificationApp/src/NotificationApp.m?rev=390#L311
如果您需要,这些搜索可能会为您提供大量示例文本:
http://lists.apple.com/archives/installer-dev/2006/Aug/msg00031.html表明bugtracker上可能有一些“官方”文档,但你需要一个ADC会员才能找到...
我发现了什么:
以 installer:PHASE
开头的行开始一个新阶段。文本可以显示为用户的标题,完成百分比设置为0.
以 installer:STATUS
开头的行是进度通知,包含可以向用户显示的文字。没有给出完成的迹象。
以 installer:%
开头的行表示完成程度:它们表示已完成工作的分数,而不是PERCENTAGE。 (1.000000 ==完成,0.500000 ==中途)
成功完成的行由以下行表示: installer: The install was successful.
任何时候, installer: The install failed
行都会显示安装失败。
如果上一行包含方括号内的文字(通常类似于: installer: The install failed (The following install step failed: run <...>)
,那么可以向用户显示括号内的文字作为失败原因。
答案 1 :(得分:2)
你应该查看/var/log/install.log,这是安装程序程序的所有组合输出所在的位置。此外,根据程序的性质,您可能会发现查看安装程序生成的收据很有用。这些可在/ Library / Receipts中找到。有关详细信息,请参阅this Apple technote。
在安装结束时,您会得到一些日志记录输出:
Jul 10 19:26:24 ant Installer[24618]: Starting installation:
Jul 10 19:26:24 ant Installer[24618]: Finalizing installation.
Jul 10 19:26:24 ant Installer[24618]: IFDInstallController 857550 state = 5
Jul 10 19:26:24 ant Installer[24618]: Displaying 'Install Succeeded' UI.
Jul 10 19:26:28 ant installdb[24624]: done. (0.006u + 0.004s)
虽然此处没有给出硬返回代码,但至少足以解析以确定安装是否成功。
答案 2 :(得分:1)
如果您想查看包装破损的样子,只需更换其中一个动态脚本(preflight
,preinstall
,preupgrade
和post*
对应物)使用返回非零的脚本。它不需要做任何其他事情,只返回非零的东西(如Apple software delivery guide中所述,任何其他返回值取消安装)。