NPAPIプラグイン内から外部アプリケーションを起動します
-
27-09-2019 - |
質問
javasprociptコールを介してトリガーされる操作の実行に関して正常に機能するNPAPIプラグインが作成した理由を解決しようとしています。CreateProcess()またはShellexeCute()を使用して、JavaScriptコールで指定されたパスからアプリケーションを起動します。
これらのメソッドのいずれかを使用しているように見えますが、成功を返します。つまり、エラーコードはありません。しかし、アプリケーションは開始されません。新しいプロセスグループなどを作成するために、それらを呼び出すときに使用されるパラメーターを変更しようとしましたが、効果がないようです。
これは少しセキュリティリスクのように思えるかもしれませんが、非常に具体的な目的のために、それを使用したいと考えています。
Windows XP Pro SP3、Firefox 3.5および次のコードを使用してください。
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( CreateProcess( NULL, wFileName, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP,
NULL, NULL, &si, &pi ) )
{
bSuccess = true; // Close process and thread handles.
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
解決
コード(スニペット)がなければ、それを噛むことは、貴重なヒントを与えるのは本当に難しいです。
なぜこれがXPで機能しないのかわかりません。 CreateProcess()/ShellexeCute()呼び出しが成功することを確認してください。
試してみるべきこと:
無効なパスを通過した場合、ShellexeCute()コールも成功しますか?
ハードコーディングされたパス(notepad.exeへのパス、スペースのないパスなど)を使用するとどうなりますか?
起動しようとしているアプリケーションの実行可能ファイルがアクセシングされている場合は、ProcessMonitor(以前のFilemon)に確認してください。
dllが見つからないため、実行可能ファイルは起動しないかもしれません。
プラグイン内からアプリケーションを起動する際に、動作/現在のディレクトリはブラウザ実行可能ファイルのディレクトリであることに注意してください。
したがって、アプリケーションフォルダーにあるDLLは見つかりません。