• Viernes 8 de Noviembre de 2024, 16:46

Autor Tema:  Llamada A Createprocess  (Leído 7036 veces)

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Llamada A Createprocess
« en: Lunes 15 de Enero de 2007, 12:14 »
0
Hola, esoy haciendo la siguiente llamada :

if(CreateProcess(NULL,ruta.c_str(),NULL,NULL,0,0,NULL,NULL,&StartInfo,&ProcessInfo)!=0)

donde la variable contiene el path donde se encuentra el programa ejecutable que
quiero llamar. Lo que me ocurre es que no se ejecuta el codigo del if y me da error
numero 998.

Espero que alguien me ayude.
Muchas gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #1 en: Lunes 15 de Enero de 2007, 13:00 »
0
¿Viste el ejemplo de la MSDN? http://msdn2.microsoft.com/en-us/library/ms682512.aspx

StartInfo debe tener todos sus campos a 0 excepto cb que tiene que ser igual a sizeof(STARTUPINFO). ProcessInfo tambien debe tener todos sus campos a 0.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #2 en: Lunes 15 de Enero de 2007, 13:14 »
0
Los tenia todos los campos puestos como tu me has comentado menos los de processinfo. Lo he pueso y no me ha dado ningun error pero de todas maneras me
sigue ocurriendo el problema de que no espera que se termine el ejecutable que llamo para continuar con el resto  de codigo que tengo.
Lo he vuelto a lanzar de nuevo y ahora me vuelve a salir el error 998, no lo entiendo. ¿Da el error cuando quiere? ;)


       StartInfo.cb = sizeof(StartInfo);
       StartInfo.lpReserved = NULL;
       StartInfo.lpReserved2 = NULL;
       StartInfo.cbReserved2 = 0;
       StartInfo.lpDesktop = NULL;
       StartInfo.dwFlags = 0;

       ProcessInfo.hProcess= NULL;
       ProcessInfo.hThread =NULL;
       ProcessInfo.dwProcessId = 0;
       ProcessInfo.dwThreadId =0;

       AnsiString ruta;
      ruta = "C:\\InstalacionCovapaFinal\\InstalacionNueva\\APA\\650MB\\DISK1\\Setup.exe";

       if(CreateProcess(ruta.c_str(),NULL,NULL,NULL,false,0,NULL,NULL,&StartInfo,&ProcessInfo)!=0)
       {
          Fin = false;
         while(false)
         {
           switch ( WaitForSingleObject(ProcessInfo.hProcess,INFINITE))
           {
              WAIT_OBJET_0 : Fin = true;

            //  WAIT_TIMEOUT : kk = 0;


           }
           
         }//fin del while

         CreaDatosTablas();
         CambiaConfiguracionRegional();
         Session->SaveConfigFile();
         ModificarRegistro();


       }//fin de si la aplicacion se ha lanzado sin problemas
       else
       {
          ShowMessage(GetLastError());
       }


Espero solucionarlo, Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #3 en: Lunes 15 de Enero de 2007, 13:35 »
0
Cita de: "desire"
Lo he pueso y no me ha dado ningun error pero de todas maneras me sigue ocurriendo el problema de que no espera que se termine el ejecutable que llamo para continuar con el resto  de codigo que tengo.
Nunca va a esperar ya que tenes un while(false) ... false es 0, entonces no entra jamas al bucle, no hace falta ningun bucle asi que lo mejor es que lo borres directamente.

Tambien fijate el switch ... no usas case y entonces toma eso (donde no escribiste OBJECT sino OBJET como una etiqueta).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #4 en: Lunes 15 de Enero de 2007, 13:44 »
0
Hola, lo he dejado como tu me has dicho pero ahora me sigue saliendo lo del error
998.
He buscado a que hace referencia dicho error pero no he encontrado nada al respecto.

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #5 en: Lunes 15 de Enero de 2007, 14:17 »
0
Cita de: "desire"
Hola, lo he dejado como tu me has dicho pero ahora me sigue saliendo lo del error
998.
He buscado a que hace referencia dicho error pero no he encontrado nada al respecto.
La MSDN dice esto:
ERROR_NOACCESS
998 Invalid access to memory location

Comproba que el path sea correcto, proba cosas como abrir el notepad ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #6 en: Lunes 15 de Enero de 2007, 16:06 »
0
Sinceramente no se lo que pasa, por a veces me sale el error 998 y otras veces si que se ejecuta el setup.exe de la llamada aunque el codigo que viene a continuacion no se espera a que el proceso termine porque eso tambien es un problema, estoy un poco desesperada xq esto lo tengo que entregar.

Muxisimas gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #7 en: Lunes 15 de Enero de 2007, 16:08 »
0
¿Probaste abriendo un proceso conocido con GUI? Lease notepad, calc, etc.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #8 en: Lunes 15 de Enero de 2007, 16:21 »
0
Si que lo probe y me ocurre lo mismo a veces se abre y otras 998, de todas maneras creo que ahora no me sale error pero tengo el problema de que no espea que termine.
Se te ocurre algo?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #9 en: Lunes 15 de Enero de 2007, 16:27 »
0
Depuralo ...

Este codigo espera al notepad y funciona siempre:
Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. void main()
  5. {
  6.   STARTUPINFO si;
  7.   PROCESS_INFORMATION pi;
  8.   ZeroMemory(&si, sizeof(si));
  9.   si.cb = sizeof(si);
  10.   ZeroMemory(&pi, sizeof(pi));
  11.   if (CreateProcess(NULL, "notepad", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
  12.   {
  13.     WaitForSingleObject(pi.hProcess, INFINITE);
  14.     CloseHandle(pi.hProcess);
  15.     CloseHandle(pi.hThread);
  16.   }
  17. }
  18.  
  19.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #10 en: Lunes 15 de Enero de 2007, 16:41 »
0
STARTUPINFO si;
           PROCESS_INFORMATION pi;
           ZeroMemory(&si, sizeof(si));
           si.cb = sizeof(si);
           ZeroMemory(&pi, sizeof(pi));
           AnsiString ruta;
           ruta = "C:\\InstalacionCovapaFinal\\InstalacionNueva\\APA\\650MB\\DISK1\\SETUP.exe";
           if (CreateProcess(NULL, ruta.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
           {
             WaitForSingleObject(pi.hProcess,INFINITE);
             CloseHandle(pi.hProcess);
             CloseHandle(pi.hThread);
             CreaDatosTablas();
             //3. Configuramos los parametros del alias
             CambiaConfiguracionRegional();
             Session->SaveConfigFile();
             ModificarRegistro();
           }

Si pongo infinite el programa se me queda colgao no se lanza nada,en cambio si pongo pej 5000 se me ejecuta antes la llamada CreaDatosTablas antes que el setup y no puede ser.

Muchas gracias por la ayuda que me estas dando.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #11 en: Lunes 15 de Enero de 2007, 17:00 »
0
Cita de: "desire"
Si pongo infinite el programa se me queda colgao no se lanza nada,en cambio si pongo pej 5000 se me ejecuta antes la llamada CreaDatosTablas antes que el setup y no puede ser.

Muchas gracias por la ayuda que me estas dando.
¿Seguro que no se lanza nada? ¿Comprobaste en el taskmanager? Podes usar el Process Explorer para verlo:
http://www.microsoft.com/technet/sysintern...ssExplorer.mspx

Si pones 5000 pasaran 5 segundos, al ver que el proceso todavia existe se dara el timeout y entonces tu codigo seguira ejecutandose pese a que el setup no haya terminado ... ¿Tiene GUI el setup ese?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #12 en: Lunes 15 de Enero de 2007, 17:19 »
0
Pues se me queda colgado , con el administrador de tareas , me pone programa no responde, creo que tiene que ser por culpa del setup.exe, xq no es un ejecutable cualquiera sino que es un instalador hecho con el installshield, sabes tu si influye en algo?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #13 en: Lunes 15 de Enero de 2007, 18:01 »
0
Cita de: "desire"
Pues se me queda colgado , con el administrador de tareas , me pone programa no responde, creo que tiene que ser por culpa del setup.exe, xq no es un ejecutable cualquiera sino que es un instalador hecho con el installshield, sabes tu si influye en algo?
No lo se. ¿Que pasa si le das doble click a ese ejecutable? Supongo que no se quedara colgado ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #14 en: Lunes 15 de Enero de 2007, 18:19 »
0
Que va no se queda colgando , comienza a instalarse el programa.
Yo tampoco se lo que le pasa ni cual puede ser la solucion.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #15 en: Lunes 15 de Enero de 2007, 18:25 »
0
¿Con el notepad va bien? Si usas el programa que te dije antes podes ver la linea de comandos del instalador tanto cuando le das doble click como cuando lo ejecuta tu programa ... comparalas. Y de ultima depura el instalador ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

desire

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #16 en: Lunes 15 de Enero de 2007, 18:31 »
0
Con el notepad y otro ejecutabla hecho en builder todo funciona correctamente solo ocurre con el setup.exe
El instalador no lo puedo depurar xq no es codigo que yo hay escrito, el install shield lo hace automaticamente, no se si me explico.
Seguire buscando por ahi a ver.

Miles de gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamada A Createprocess
« Respuesta #17 en: Lunes 15 de Enero de 2007, 18:33 »
0
Comparala las lineas de comandos a ver si ves algo ... y en realidad si lo podes depurar aunque claro a nivel de assembly unicamente.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.