1

私が作成した NPAPI プラグイン (Javascipt 呼び出しによってトリガーされる操作の実行に関しては正常に機能する) が、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 ); 
}
4

1 に答える 1

0

噛むためのコード(スニペット)がないと、貴重なヒントを与えるのは非常に困難です。

XPでこれが機能しない理由がわかりません。CreateProcess()/ ShellExecute()呼び出しが成功してもよろしいですか?

試すべきこと:

  • 無効なパスを渡した場合、ShellExecute()呼び出しも成功しますか?

  • ハードコードされたパス(たとえば、notepad.exeへのパス、スペースのないパスなど)を使用するとどうなりますか?

  • 起動しようとしているアプリケーションの実行可能ファイルにアクセスできるかどうかをProcessMonitor(以前のfilemon)に確認してください。

依存するDLLが見つからないため、実行可能ファイルが起動しない可能性があります。
プラグイン内からアプリケーションを起動する場合、作業/現在のディレクトリはブラウザの実行可能ファイルのディレクトリであることに注意してください。
そのため、アプリケーションフォルダにあるDLLが見つからない場合があります。

于 2010-05-17T13:13:57.843 に答える