У меня есть плагин NPAPI для MAC, который загружает и запускает приложение с сервера.COCOA: Приложите приложение к фронту, запущенному из плагина NPAPI
Когда я использую 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];
Это работает ОК, но не в одной ситуации. Когда приложение загружается и выполняется FIRST TIME командой NSworkspace, команды MAC с диалоговым окном «это приложение, загруженное из Интернета. Вы уверены, что хотите его открыть».
Если нажать OK, приложение запускается, но не выходит на передний план. Этот диалог появляется только в том случае, если приложение запускается через NSWorkspace. Запуск с помощью NSTask, MAC не запрашивает диалог перед выполнением.
Не удалось найти решение проблемы с этой проблемой. Я в порядке с диалоговым окном подтверждения с NSWorkspace, но кто-нибудь может предложить что-то, что по-прежнему будет приносить приложение на передний план после нажатия OK.
Я также пробовал использовать.
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
[[NSWorkspace sharedWorkspace] activeApplication];
Любая помощь в этом была бы оценена. Заранее спасибо.
С уважением,
LazyCoder7.
Зависит от дизайна. Если это плагин NPAPI, который загружает приложения, написанные той же организацией, с сервера, которым управляет автор плагинов (можно надеяться, что это делается через https, так что это не может быть MiTM'd), а затем авторизация пользователя практически бессмысленна. В этом случае все это часть одной и той же сети доверия.Я согласен, что если это просто загрузка случайных приложений, снятие флага карантина - плохая идея. Но если это случайные приложения, загрузка и запуск их без вмешательства пользователя - это, во-первых, плохая идея, поэтому я предполагал, что это не так. – smorgan
НЕТ это не случайное приложение. Его разработано тем же автором (ME) и для той же организации. Таким образом, загруженное приложение является частью сети доверия. – LazyCoder7
Спасибо, что smorgan он работал как шарм .... – LazyCoder7