使用NSWorkspace launchApplicationAtURL启动应用程序后获取退出状态

Ben*_*Ben 3 macos cocoa objective-c

我是Mac编程的新手.我正在向OSX移植一个插件.我需要我的应用程序来启动第二个应用程序(我不控制其来源),然后获取其退出代码.NSWorkspace launchApplicationAtURL非常适合用所需的参数启动它,但我看不到如何获取退出代码.在设置终止第二个应用程序的通知后,有没有办法获得它?我看到了使用NSTask获取退出代码的工具.我应该使用它吗?

CRD*_*CRD 6

这些NSWorkspace方法实际上是用于启动独立应用程序; 用于NSTask"按照文档运行另一个程序作为子进程并监视程序的执行".

这是一个简单的方法来启动可执行文件并返回其标准输出 - 它阻止等待完成:

// Arguments:
//    atPath: full pathname of executable
//    arguments: array of arguments to pass, or nil if none
// Return:
//    the standard output, or nil if any error
+ (NSString *) runCommand:(NSString *)atPath withArguments:(NSArray *)arguments
{
    NSTask *task = [NSTask new];
    NSPipe *pipe = [NSPipe new];

    [task setStandardOutput:pipe];     // pipe standard output

    [task setLaunchPath:atPath];       // set path
    if(arguments != nil)
        [task setArguments:arguments]; // set arguments

    [task launch];                     // execute

    NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile]; // read standard output

    [task waitUntilExit];              // wait for completion

    if ([task terminationStatus] != 0) // check termination status
        return nil;

    if (data == nil)
        return nil;

    return [NSString stringWithUTF8Data:data]; // return stdout as string
}
Run Code Online (Sandbox Code Playgroud)

您可能不想阻止,特别是如果这是您的主UI线程,提供标准输入等.