我有一个用于 MAC 的 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];
这一切正常,但不是在一种情况下。当应用程序通过 NSworkspace 命令第一次下载并执行时,MAC 会提示一个对话框“是从 Internet 下载的应用程序。您确定要打开它吗”。
如果按下确定,应用程序会启动但不会出现在最前面。此对话框仅在应用程序通过 NSWorkspace 启动时出现。使用 NSTask 启动,MAC 在执行前不会提示对话框。
找不到解决问题的解决方案。我对 NSWorkspace 的确认对话框很满意,但是任何人都可以提出一些在单击“确定”后仍会将应用程序带到前面的建议。
我也试过用。
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
[[NSWorkspace sharedWorkspace] activeApplication];
对此的任何帮助将不胜感激。提前致谢。
问候,
懒人编码器 7.