如何在锁定主应用程序时启动包文件并等待它终止

时间:2013-01-10 20:55:03

标签: cocoa

我希望启动一个包文件并等待安装完成/关闭。同时主要的呼叫应用程序应该被锁定直到完成。

到目前为止,我已尝试过以下内容......

- (IBAction)installDriver:(id)sender
{
    NSString *file = [[NSBundle mainBundle] pathForResource:@"ExamplePackage" ofType:@"pkg"];
    [[NSWorkspace sharedWorkspace] openFile:file];
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(appDidEnd:) name:NSWorkspaceDidTerminateApplicationNotification object:nil];
}

- (void)appDidEnd:(NSNotification *)notification
{
    NSLog(@"app info: %@", [notification userInfo]);
}

问题是appDidEnd会在任何应用程序关闭时被调用,此外无法检测ExamplePackage.pkg是否已关闭,因为userinfo将installer.app报告为关闭应用程序。

关于我想要达到的目标的任何想法......

1 个答案:

答案 0 :(得分:0)

在意识到存在NSTask之后找到了解决方案。

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/open"];
[task setArguments:[NSArray arrayWithObjects:[[NSBundle mainBundle] pathForResource:@"MyPackageFile" ofType:@"pkg"], nil]];
[task launch];
[task waitUntilExit];

当你知道如何:

时很容易