【问题标题】:PackageMaker "Result of Script" requirement never passesPackageMaker“脚本结果”要求永远不会通过
【发布时间】:2011-03-17 23:18:07
【问题描述】:

我正在尝试使用“脚本结果”要求来检查特定进程是否正在运行,以便在安装开始之前向用户发送消息。 我的脚本是一个 shell 脚本,失败返回 1,成功返回 0。我遇到的问题是,无论我的返回值如何,安装程序流程都将其解释为失败。我没有使用非常简单的脚本:

#!/bin/bash
echo "script starting">> /tmp/myfile
true

(回显是为了向自己保证脚本实际上正在运行)。我尝试用很多东西(出口 0、出口 1、“true”、“TRUE”)替换最后一行,但没有任何结果导致测试通过。

我还发现以下 JavaScript 代码会在我激活此要求时添加到 distribution.dist。

<installation-check script="pm_install_check();"/>
<script>function pm_install_check() {
    if(!(system.run('path/to/script/myscript.sh') == true)) {
        my.result.title = 'Title';
        my.result.message = 'Message';
        my.result.type = 'Fatal';
        return false;
    }
    return true;
}
</script>

据我所知,if 语句中的表达式永远不会计算为真。所以,我假设这是我的问题。不过,我不知道如何绕过它,因为这段代码是由 PackageMaker 生成的。


更新

我决定在这是 PackageMaker 中的错误的印象下工作,并且接近解决方法。我没有使用“脚本的结果”要求,而是使用了“Javascript 的结果”要求,并构建了一个看起来像这样的 Javascript 函数

function my_check() {
    code = system.run('path/to/script/myscript.sh');
    return code == 0;
}

现在我唯一的问题是,这仅在我通过绝对路径指向我的脚本时才有效。显然这给安装者带来了问题。

【问题讨论】:

    标签: packagemaker


    【解决方案1】:

    对你来说可能为时已晚,但我觉得这应该记录在某个地方。

    今天早上的大部分时间里,我一直在四处寻找答案。长话短说,我最终研究了通用 bash 脚本,并找到了一些关于从脚本调用的脚本返回值的信息。可以这样做:

    您将在任何地方使用exit 0(为了成功)使用$(exit 1)

    正如您所料,exit 1 应该替换为 $(exit 0)

    我意识到这是倒退的,我并没有真正理解其背后的原因,但经过一些实验后我发现了。

    【讨论】:

    • 谢谢凯文!对我来说为时已晚 :-) 但我希望这对其他人有帮助,因为它肯定不直观。
    • 谢谢!确实帮助了我。 -- 其他人。
    【解决方案2】:

    嗯,这并不完全是问题的答案,但它最终确实解决了我的问题。这个名为Packages 的免费软件打包实用程序支持“脚本结果”功能并正确处理路径。不幸的是,它创建的软件包仅与 OS 10.5 及更高版本兼容。为了支持 10.4,我正在使用 PackageMaker 构建一个单独的安装程序,但跳过了“脚本结果”要求。

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多