문제

I am trying to work out why an NPAPI plugin I have written, which works fine in terms of performing operations triggered via Javascipt calls, cannot use CreateProcess() or ShellExecute() to launch an application from a path specified via the Javascript call.

I can seemingly use either of these methods and they return success, i.e. no error code. But the application just does not launch. I have tried modifying the parameters used when calling them, to create new process group etc. But seemingly with no effect.

I know this may seem like a bit of a security risk, but for the very specific purpose we wish to use it for it shouldn't be a problem.

Using Windows XP Pro SP3, Firefox 3.5 and the following code:

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 ); 
}
도움이 되었습니까?

해결책

Without any code (snippet) to chew on it is really hard to give valuable hints:

I don't see why this should not work on XP. Are you sure that the CreateProcess()/ShellExecute() calls succeed?

Things to try:

  • Does the ShellExecute() call also succeed if you pass an invalid path?

  • What happens if you use a hard-coded path (e.g. the path to notepad.exe, a path without spaces, etc.)?

  • Check with ProcessMonitor (former filemon) if the executable file of the application you are trying to launch is acceessed.

Maybe the executable doesn't launch because a depending DLL is not found.
Keep in mind that the working/current directory is the directory of the browser executable when launching the application from within a plugin.
Therefore DLLs that are located in the application folder might not be found.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top