我有一个应用程序 A ,可能需要也可能不需要生成应用程序 B 并使用远程消息传递与它通信(通过 NSConnection s等。)。
虽然如果首先启动 B ,我知道怎么做,我想知道:
根据需要透明地启动 B 的基于可可的干净方法是什么?
(对于熟悉COM的人,我实际上正在寻找CoCreateInstance()
等效物)
答案 0 :(得分:2)
如果这是一个GUI应用程序,你可以为10.6做这样的事情:
NSArray * runningBs = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.example.B"];
if ([runningBs count] == 0) {
NSURL * bURL = [[NSWorkspace sharedWorkspace] URLForApplicationWithBundleIdentifier:@"com.example.B"];
NSRunningApplication * b = [[NSWorkspace sharedWorkspace] launchApplicationAtURL:bURL options:NSWorkspaceLaunchDefault configuration:nil error:nil];
}
对于10.5:
使用-[NSWorkspace launchedApplications]
并遍历数组以查看是否找到 B
如果不这样做,请找到[NSWorkspace absolutePathForAppBundleWithIdentifier:]
,然后使用其中一个[NSWorkspace launchApplication:]
种类。
答案 1 :(得分:2)
如果其他应用程序是命令行应用程序或行为类似,则NSTask是最佳选择 - 您可以启动另一个程序并定义其标准输入,输出和错误流。如果这是一个GUI应用程序,您可以使用Scripting Bridge或NSWorkspace +使用您自己的通信协议与NSConnection等。