2012-05-21 3 views
1

내 코코아 응용 프로그램에서 외부 응용 프로그램을 시작하려면 system() 함수를 호출해야합니다. 내가 사용하는 명령은 다음과 같습니다코코아 응용 프로그램에서 시스템() 호출

system("./main &"); 

내가 엑스 코드에서 응용 프로그램을 실행하면 내가 어디 주요 넣어하는 폴더를 알고 있기 때문에, 그것이 잘 작동합니다.

아카이브를 만들고 내 .app 응용 프로그램을 배포하면 system()에서 "main"을 찾을 수 없습니다. 내가 그것을 어디에 넣어야하는지 ?? 그렇지 않으면 응용 프로그램이없는 폴더에서 "./"을 사용하여 응용 프로그램을 어떻게 실행할 수 있습니까?

EDIT : 어쩌면 NSTask를 사용하여 해결되었지만 백그라운드에서 "메인"을 어떻게 실행할 수 있습니까? 이제 새로운 터미널 창에서 열립니다.

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/Applications/Multibo/main"]; 
[task setArguments:[NSArray arrayWithObjects:[NSString stringWithFormat:@"./main &"], nil]]; 
[task launch]; 

감사

+1

런타임시 작업 디렉토리에 대한 가정을 할 수 없으므로 전체 경로가 필요합니다. –

답변

1

실행 파일의 이름 앞에 전체 경로를 추가 시도하고 system에 대한 인수로 사용합니다. system은 구현에 따라 정의됩니다. 시스템의 동작은 시스템 전체에서 동일하지 않으므로 사용법을 권장하지 않습니다. 아마도 NSWorkspace과 같은 적합한 대안을 찾아야합니다.

1

답은 직접적으로 정확하지만 실제 답변은 더 복잡합니다.

먼저 NSTask은 일반적인 명령 줄 호출자가 아닙니다. 그것이 &을 추가하는 것이 예상 한대로 수행되지 않는 이유입니다. 실제로 NSTask을 통해 호출 된 모든 작업은 실제로 배경입니다.

하지만 NSTask를 사용하고 싶지는 않습니다. 정말로 XPC 서비스를 사용해야합니다. 이제 목표가 프로그램 종료 후에도 실행되는 것이라면 LaunchServices를 조사해야합니다.

관련 문제