2014-04-10 4 views
0

나는 내가 myprogram (나는이 프로그램에 어떤 컨트롤이없는) 다른 프로그램 myauxprogram을 시작 것을 알고NSTask : 다른 프로그램을 시작하는 프로그램, 어떻게해야합니까?

$ myprogram myfile.ext 

를 통해 터미널에서 할 수 있어요 무엇 NSTask 함께하고 싶은. 또한 myprogram의 경로는 path1이고 myprogram의 경로는 path2입니다. 내가

NSTask * myTask = [[NSTask alloc] init]; 

NSArray * arguments = @[@"myfile.ext"] ; 

[myTask setCurrentDirectoryPath:[URLOfTheFolder path]]; 
[myTask setLaunchPath:@"/path1/myprogram"]; 
[myTask setArguments:arguments]; 

[myTask launch] ; 

을 할 경우 내가 myauxprogrampath1의 기호 링크를 작성하는 경우

나는 문제가 동일하며, 다음과 같은 오류를 sh: myauxprogam: command not found

를 얻을.

답변

0

문제였다 :

당신은 (등, PATH) 작업이 환경 변수되는 알고 그래서 [myTask setEnvironment:...]

0

대부분 아이디어가있는 것처럼 보입니다. 몇 가지 핵심 요소가 누락되었습니다. NSTask에는 인수와 옵션을 설정해야하는 경로 유형에 따라 정의 된 LaunchPath가 있어야합니다 (예 : /usr/bin/sh, /usr/bin 등).

NSTask *auxTask; 
NSTask *auxPath = @"./path1/myprogram";  // period might be needed 
NSTask *auxArgs = @"myfile.ext"; 

auxTask = [[NSTask alloc] init]; 
[auxTask setLaunchPath:@"/usr/bin/sh"];   // use shell 

[auxTask setArguments:[NSArray arrayWithObjects: 
          @"-c",    // -c will exec as shell cmd 
          auxPath, 
          auxArgs, 
          nil]]; 

    // using `try` is optional 

    @try 
    { 
     [auxTask launch]; 
    } 
    @catch(id exc) 
    { 
     auxTaskSuccess = NO; 
    } 
    [auxTask release]; 

return; 

이 방법이 효과가 있을지는 모르겠지만 가능성이 높습니다. 오류가있는 문제가 발생하거나 NSTask 오류가 발생하면을 auxTask NSArray과 함께 설정하여 수행중인 작업을 정확하게 볼 수 있습니다.

+0

감사를 필요로한다! http://stackoverflow.com/q/23025355/1670830에서 살펴볼 수 있습니까? – Colas

+0

그래서 내가 여기에 뭔가를 적용하고 싶습니까? 어느 것이 작동하는지 나에게 보여줘야하고 위의 코드를 고칠 수 있습니다. –