NSTask 启动路径错误 [重复]

Posted

技术标签:

【中文标题】NSTask 启动路径错误 [重复]【英文标题】:NSTask launch path error [duplicate] 【发布时间】:2012-10-17 16:19:01 【问题描述】:

可能重复:NSTask launch path not accessible

任何想法为什么要调用这个,

NSTask *buildMTask = [[NSTask alloc] init];
[buildMTask setLaunchPath:@"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\\ Simulator.app/Contents/MacOS/iPhone\\ Simulator"];
[buildMTask launch];

结果

'启动路径不可访问'?

谢谢!

【问题讨论】:

你为什么要转义空格字符?它应该是文件的路径,因此不应转义空格 空格是否转义没有任何区别...同样的错误发生... ***.com/questions/3221432/… 是关于启动一个shell脚本,所以我不认为它是重复的。 您确定在这两种情况下都删除了 `\\` 吗?因为它可以在我的电脑上运行。 - 或者您正在构建沙盒应用程序? 【参考方案1】:
NSString *appname = @"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator";
NSTask *aTask = [[NSTask alloc] init];
[aTask setLaunchPath:appname];
BOOL exists = [[NSFileManager defaultManager] isExecutableFileAtPath:[aTask launchPath]];
NSLog(@"%@ '%@'\n", exists ? @"Exists" : @"Does Not Exist", [aTask launchPath]);
[aTask launch];

工作正常,甚至记录可执行文件存在。删除可执行文件名称中的\\ - 全部删除。

我建议在尝试运行应用程序之前使用可执行文件存在检查。

【讨论】:

如果无法执行,那我们该怎么办呢?在运行时运行 chmod? NSTask 将可执行文件作为第一个选项,如果有问题的项目不是可执行文件,那么您应该问为什么。如果只是它是一个脚本并且它没有设置为可执行文件,那么按照这个问题被标记为重复的答案的建议。如果它在应用程序包中并且未标记为可执行文件,那么您的构建不正确。

以上是关于NSTask 启动路径错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle 中的 NSTask

NSTask 字符输出到 NSTextField 无缓冲作为连续流

如何在主线程上安全地使用[NSTask waitUntilExit]?

NSTask 源码中有趣的地方

将授权服务与 NSTask 一起使用

Xcode 8 扩展执行 NSTask