【问题标题】:Using NSTask as root - error: "launch path not accessible"以根用户身份使用 NSTask - 错误:“启动路径不可访问”
【发布时间】:2011-08-11 14:39:43
【问题描述】:

由于某种原因,当我尝试通过 NSTask 运行任务时,我收到错误消息:“启动路径不可访问”。

我的应用程序以 root 身份运行。如果我在终端输入完全相同的命令,它运行正常,所以我有点困惑。

我的应用程序将一个名为 relaunch 的工具复制到 NSTemporaryDirectory()。如果我尝试从这里运行它,我会得到“无法访问启动路径”。奇怪的是,如果我手动将工具复制到我的桌面,然后在 NSTask 中硬编码路径,它将正确执行。我不知道为什么。

有人知道为什么会这样吗?

注意:仅供参考,试图让 Sparkle 从 github 工作。

代码如下:

@try{
[NSTask launchedTaskWithLaunchPath:relaunchPath arguments:[NSArray arrayWithObjects:pathToRelaunch, [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]], nil]];
}

在哪里

relaunchPath = @"/var/folders/zz/zzzivhrRnAmviuee+++++++++++/-Tmp-/relaunch";

【问题讨论】:

    标签: cocoa nstask sparkle


    【解决方案1】:

    错误消息是来自您的应用还是来自重新启动?如果您没有将其标准错误更改为指向其他任何地方,它将写入您的应用所做的相同 stderr,因此您实际上可以成功启动重新启动并且错误消息实际上来自重新启动。

    @try 之后添加一个@catch 块以查看 NSTask 是否确实失败,并检查pathToRelaunch

    如果您有 @catch 块,请编辑您的问题以包含它。如果事实证明重新启动是发生故障的地方,但 pathToRelaunch 看起来正确,请编辑您的问题以包含来自重新启动工具的相关源代码。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 2017-09-20
      • 2011-05-02
      • 2013-06-24
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多