2013-02-20 6 views
0

서버에서 응용 프로그램을 다운로드하고 실행하는 MAC 용 NPAPI 플러그인이 있습니다.COCOA : NPAPI Plugin에서 프론트로 응용 프로그램 가져 오기

NSTask를 사용하여 응용 프로그램을 열 때. 응용 프로그램이 앞으로 오지 않습니다.

NSBundle *bundle = [NSBundle bundleWithPath:AppPath]; 
NSString *path = [bundle executablePath]; 
NSTask *task = [[NSTask alloc] init]; 
NSArray *arguments; 
arguments = [NSArray arrayWithObjects:AppParam,nil]; 

[task setLaunchPath:path]; 
[task setArguments:arguments]; 
[task launch]; 

나는 해결책을 검색하고 코드

int pid = [task processIdentifier]; 
ProcessSerialNumber psn; 
GetProcessForPID(pid, &psn); 
SetFrontProcess(&psn); 

함께 들어 왔지만 전면에 응용 프로그램을 가져 오지 않는이 코드는 다음 코드를 시도했다.

NSRunningApplication *runapp = [NSRunningApplication runningApplicationWithProcessIdentifier:pid]; 
[runapp activateWithOptions:0]; 

이렇게하면 원하는 결과가 나오지 않습니다.

일부 검색 후에 NSWorkspace를 사용하여 응용 프로그램을 시작하고 활성화 할 것을 제안하는 게시물을 발견했습니다. 나는 코드를 생각해 냈다.

[workspace 
    launchApplicationAtURL:[bundle bundleURL] 
    options:NSWorkspaceLaunchNewInstance 
    configuration:[NSDictionary 
     dictionaryWithObject:arguments 
     forKey:NSWorkspaceLaunchConfigurationArguments] 
    error:error]; 

이것은 모두 정상적으로 작동하지만 하나의 상황에서는 작동하지 않습니다. 응용 프로그램이 다운로드되고 NSworkspace 명령에 의해 처음으로 실행될 때 MAC은 "인터넷에서 다운로드 한 응용 프로그램입니까? 정말 열려십니까?"라는 대화 상자를 표시합니다.

누르면 응용 프로그램이 시작되지만 앞쪽으로 오지 않습니다. 이 대화 상자는 응용 프로그램이 NSWorkspace를 통해 실행되는 경우에만 나타납니다. NSTask로 시작하면 MAC은 실행하기 전에 대화 상자를 표시하지 않습니다.

문제를 해결할 수있는 해결책을 찾을 수 없습니다. NSWorkspace와의 확인 대화 상자는 정상이지만 누구나 확인을 클릭하면 응용 프로그램을 가져올 수있는 내용을 제안 할 수 있습니다.

또한 사용해 보았습니다.

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; 
[[NSWorkspace sharedWorkspace] activeApplication]; 

이 문제에 도움이 되시면. 미리 감사드립니다.

감사합니다.

LazyCoder7.

답변

2

대화 상자를 건너 뛰고 이로 인해 발생하는 포커스 문제를 피하려면 앱을 실행하기 전에 수동으로 검역 플래그를 xattr으로 제거 할 수 있습니다.

는 (이 질문은 정말 NPAPI와는 아무 상관이 없습니다. 당신은 독립 실행 형 응용 프로그램에서이 일을 행동의 정확히 같은 설정이있을 것이다)

0

당신은 아마 일반적으로 격리 플래그를 무시해서는 안된다. 이 작업을 수행해야하는 이유는 일반적으로 잘못된 디자인을 나타냅니다.

NSWorkspace는 사용자 수준 권한으로 실행됩니다. NSTask는 부모 프로세스의 기본값으로 설정되어 있더라도 환경을 설정할 수 있습니다.

+0

디자인에 따라 다릅니다. 이 플러그인이 동일한 조직에서 작성한 앱을 다운로드하는 NPAPI 플러그인 인 경우 플러그인 작성자가 제어하는 ​​서버에서 (https를 통해 수행 중이기 때문에 MiTM이 될 수 없기를 바란다) 사용자가 앱을 승인하도록합니다. 본질적으로 무의미하다. 이 경우 모두 동일한 신뢰 네트워크의 일부입니다.난 그냥 임의의 애플 리케이션을 다운로드하는 경우 검역 플래그를 제거 나쁜 생각입니다 동의합니다. 그러나 무작위 응용 프로그램이라면 사용자 개입없이 다운로드하고 실행하는 것이 처음에는 좋지 않은 생각이므로 그렇게 생각하지 않았습니다. – smorgan

+0

아니, 그 어떤 임의의 응용 프로그램. 동일한 저자 (ME)와 동일한 조직이 개발했습니다. 따라서 다운로드 된 응용 프로그램은 신뢰 네트워크의 일부입니다. – LazyCoder7

+0

감사합니다 smorgan 그것은 매력처럼 작동했습니다 .... – LazyCoder7