Pregunta

Estoy tratando de averiguar por qué un NPAPI plug-in que he escrito, que funciona muy bien en términos de operaciones desencadenadas a través de llamadas Javascipt realizar, no puede utilizar CreateProcess () o ShellExecute () para iniciar una aplicación de una ruta especificada a través del Javascript llamada.

Me aparentemente puede utilizar cualquiera de estos métodos y volver éxito, es decir, ningún código de error. Sin embargo, la aplicación simplemente no se inicia. He intentado modificar los parámetros que se utilizan cuando se llama a ellos, para crear nuevo grupo de procesos, etc. Pero, aparentemente sin efecto.

Sé que esto puede parecer un poco de un riesgo para la seguridad, sino con el propósito muy específico que deseen utilizarla para que no debería ser un problema.

Uso de Windows XP Pro SP3, Firefox 3.5 y el siguiente código:

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 ); 
}
¿Fue útil?

Solución

Sin ningún tipo de código (fragmento) para masticar, es muy difícil dar consejos valiosos:

No veo por qué esto no debería funcionar en XP. ¿Está seguro de que el CreateProcess () / ShellExecute () llama a tener éxito?

Las cosas para probar:

  • ¿El () llamada ShellExecute también tener éxito si se pasa una ruta no válida?

  • ¿Qué ocurre si se utiliza una ruta no modificable (por ejemplo, la ruta de acceso a notepad.exe, una ruta sin espacios, etc.)?

  • Consulte con ProcessMonitor (ex Filemon) si el archivo ejecutable de la aplicación que está tratando de lanzamiento está acceessed.

Tal vez el ejecutable no se inicia debido a una DLL en función no se encuentra.
Tenga en cuenta que el directorio de trabajo / actual es el directorio del ejecutable del navegador al iniciar la aplicación desde el interior de un plugin.
Por lo tanto DLL que se encuentran en la carpeta de la aplicación no se podrían encontrar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top