Question

J'essaie de comprendre pourquoi un NPAPI plug-in que je l'ai écrit, ce qui fonctionne très bien en termes d'effectuer des opérations déclenchées par des appels javascipt, ne peut pas utiliser CreateProcess () ou ShellExecute () pour lancer une application à partir d'un chemin d'accès spécifié via le Javascript appel.

Je peux utiliser apparemment l'une de ces méthodes et ils matcher, à savoir pas de code d'erreur. Mais l'application ne se lance pas seulement. J'ai essayé de modifier les paramètres utilisés pour les appeler, pour créer un nouveau groupe de processus, etc. Mais apparemment sans effet.

Je sais que cela peut sembler un peu d'un risque de sécurité, mais dans le but très spécifique nous souhaitons utiliser pour cela ne devrait pas être un problème.

Utilisation de Windows XP Pro SP3, Firefox 3.5 et le code suivant:

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 ); 
}
Était-ce utile?

La solution

Sans code (extrait) à mâcher il est vraiment difficile de donner des conseils précieux:

Je ne vois pas pourquoi cela ne devrait pas fonctionner sur XP. Êtes-vous sûr que le CreateProcess () / ShellExecute () appelle à réussir?

choses à essayer:

  • L'appel ShellExecute () réussir aussi si vous passez un chemin non valide?

  • Qu'est-ce qui se passe si vous utilisez un chemin codé en dur (par exemple le chemin de notepad.exe, un chemin sans espaces, etc.)?

  • Consultez ProcessMonitor (ancien Filemon) si le fichier exécutable de l'application que vous essayez de lancement est acceessed.

Peut-être que l'exécutable ne démarre pas parce que ne se trouve pas une DLL en fonction.
Gardez à l'esprit que le travail / répertoire courant est le répertoire de l'exécutable du navigateur lors du lancement de l'application à partir d'un plug-in.
Par conséquent, les DLL qui se trouvent dans le dossier de l'application peuvent ne pas être trouvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top