解析/ usr / sbin / installer的输出

时间:2009-07-07 05:50:00

标签: macos installer

我正在编写基本上是许多平台上的安装程序服务的前端。我(显然)想知道的一件事是安装是否成功。在大多数平台上,这很简单:只需检查安装程序的返回代码/退出代码即可。但是,它在Mac上并不那么容易(使用/usr/sbin/installer),因为它总是退出0,你必须解析输出(在提供-verboseR选项之后)以确定它是否有成功或失败。

我只是通过反复试验来解决这个问题,但我发现很难设计自己的软件包,比如说,破坏了,以便弄清楚当软件包以某种方式被破坏时系统会说些什么。

所以我问,亲爱的Lazyweb:是否有一个规范的解析器用于/usr/sbin/installer -verboseR的输出,或者至少是一个描述它输出的东西的指南?我找到this,这有帮助,但不会让我一直到那里。必须有更好的东西;这似乎是一项普遍的任务。

3 个答案:

答案 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 <...>) ,那么可以向用户显示括号内的文字作为失败原因。

    < / LI>

答案 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)

如果您想查看包装破损的样子,只需更换其中一个动态脚本(preflightpreinstallpreupgradepost*对应物)使用返回非零的脚本。它不需要做任何其他事情,只返回非零的东西(如Apple software delivery guide中所述,任何其他返回值取消安装)。