Domanda

Sto cercando di capire il motivo per cui un plug-in NPAPI che ho scritto, che funziona bene in termini di operazioni innescate tramite chiamate Javascipt l'esecuzione, non può usare CreateProcess () o ShellExecute () per avviare un'applicazione da un percorso specificato tramite il Javascript chiamata.

posso apparentemente utilizzare uno di questi metodi e restituire il successo, vale a dire nessun codice di errore. Ma l'applicazione semplicemente non si avvia. Ho cercato di modificare i parametri utilizzati quando li chiama, per creare nuovo gruppo di processo ecc, ma apparentemente senza alcun effetto.

So che questo può sembrare un po 'di un rischio per la sicurezza, ma per lo scopo molto specifico vogliamo usarlo perché non dovrebbe essere un problema.

Utilizzo di Windows XP Pro SP3, Firefox 3.5 e il seguente codice:

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 ); 
}
È stato utile?

Soluzione

Senza alcun codice (snippet) da masticare è davvero difficile dare suggerimenti preziosi:

non vedo perché questo non dovrebbe funzionare su XP. Sei sicuro che il CreateProcess () / ShellExecute () chiamate ad avere successo?

cose da provare:

  • Il il () chiamata di ShellExecute successo anche se si passa un percorso non valido?

  • Cosa succede se si utilizza un percorso hard-coded (ad esempio il percorso di notepad.exe, un percorso senza spazi, ecc.)?

  • Controlla con ProcessMonitor (ex Filemon) se il file eseguibile dell'applicazione che si sta tentando di lancio è acceessed.

Forse l'eseguibile non viene avviato perché una DLL seconda non viene trovato.
Tenete a mente che la directory di lavoro / corrente è la directory del file eseguibile del browser quando si lancia l'applicazione all'interno di un plugin.
Pertanto DLL che si trovano nella cartella dell'applicazione potrebbero non essere trovati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top