0

サーバーからアプリケーションをダウンロードして実行する 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];

これはすべて問題なく機能しますが、1 つの状況では機能しません。アプリケーションがダウンロードされ、NSworkspace コマンドによって最初に実行されると、MAC は「インターネットからダウンロードされたアプリケーションです。本当に開きますか?」というダイアログを表示します。

[OK] を押すと、アプリケーションは起動しますが、前面には表示されません。このダイアログは、アプリケーションが NSWorkspace から起動された場合にのみ表示されます。NSTask で起動すると、MAC は実行前にダイアログを表示しません。

問題を解決する解決策が見つかりませんでした。私は NSWorkspace の確認ダイアログで問題ありませんが、[OK] をクリックした後にアプリケーションを前面に表示する何かを提案できますか?

私も使ってみました。

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

これについての助けをいただければ幸いです。前もって感謝します。

よろしく、

LazyCoder7.

4

2 に答える 2

2

xattrダイアログをバイパスして、ダイアログが作成するフォーカスの問題を回避したい場合は、アプリを起動する前に手動で隔離フラグを削除できます。

(この質問は、実際にはNPAPIとは関係ありません。スタンドアロンアプリケーションからこれを実行するのとまったく同じ一連の動作があります。)

于 2013-02-20T11:45:04.447 に答える
0

通常、検疫フラグをバイパスするべきではありません。これを行う必要があるということは、通常、設計が悪いことを示しています。

NSWorkspace は、ユーザー レベルのアクセス許可で実行されます。NSTask は、デフォルトで親プロセスの環境に設定されていても、その環境を設定できます。

于 2013-02-20T13:52:02.227 に答える