Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Saber Cuando Esta Ejecutado

Iniciado por sebastianarroyo, 22 de Febrero de 2006, 01:08:31 AM

« anterior - próximo »

sebastianarroyo

 hola. Mi inquietud es si con visual basic se pude saber si un exe se esta ejecutando  no .
Gracias !!!
Sebastian.-

BeRSeRKeR

 Me imagino que una forma de saberlo es enumerando la lista de procesos activos en el sistema e ir comparando con el nombre del ejecutable que quieras. Para ello, si no se puede directamente con VB (que no tengo ni idea), utiliza los métodos del API Win32:
En las MSDN tienes ejemplos de uso de estas funciones. Concretamente un ejemplo que enumera todos los procesos activos.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

[EX3]

 Si te refieres a saber si tu programa se esta ejecutando ya para no ejecutar dos veces el mismo programa, utiliza el siguiente codigo en el inicio del programa, por ejemplo en el evento Form_Load del formulario o en el Sub Main de un modulo BAS:
If App.PrevInstance Then
   Call MsgBox("El programa ya esta siendo ejecutado.")
   End

End If

Esto hace que si el programa ya se estaba ejecutando te mande un aviso y despues se cierre. Si lo que buscas es saber si otro programa que no sea el tuyo se esta ejecutando la cosa es algo mas compleja. Sobre lo que te refiere BeRSeRKeR en los foros de canalvisualbasic.net hay un ejemplo de ello: Listar y cerrar procesos de Win

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Pogacha

Cita de: "[EX3"] Si te refieres a saber si tu programa se esta ejecutando ya para no ejecutar dos veces el mismo programa, utiliza el siguiente codigo en el inicio del programa, por ejemplo en el evento Form_Load del formulario o en el Sub Main de un modulo BAS:
If App.PrevInstance Then
   Call MsgBox("El programa ya esta siendo ejecutado.")
   End

End If

Esto hace que si el programa ya se estaba ejecutando te mande un aviso y despues se cierre.
Esto anda realmente ...
es que he visto discuciones muy largas con el tema de "evitar que mi aplicación se ejecute dos veces" ...

Pogacha

Cita de: "Pogacha"
Cita de: "[EX3"] Si te refieres a saber si tu programa se esta ejecutando ya para no ejecutar dos veces el mismo programa, utiliza el siguiente codigo en el inicio del programa, por ejemplo en el evento Form_Load del formulario o en el Sub Main de un modulo BAS:
If App.PrevInstance Then
   Call MsgBox("El programa ya esta siendo ejecutado.")
   End

End If

Esto hace que si el programa ya se estaba ejecutando te mande un aviso y despues se cierre.
Esto anda realmente ...
es que he visto discuciones muy largas con el tema de "evitar que mi aplicación se ejecute dos veces" ...
¿Eso anda realmente?
Tengo problemas con el signo de pregunta y termino diciendo otra cosa  (grrr)  (nooo)  (nooo) estupido yo!

[EX3]

 Nunca he oido que dicho sistema fallase, y a mi jamas me ha fallado. Algunos proyectos mios como aquella version del TLSA Engine "scriptable" que probasteis hace tiempo lo tenia implementado por ejemplo. Para prueba un boton: Ejemplo sencillo del uso de App.PrevInstance - binario + codigo fuente (zip 4.04 kb)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

bnl

 Yo hace mucho que no toco el VB, pero recuerdo que utilizaba el App.PrevInstance y no me fallaba.
Saludos
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Pogacha

 Aparentemente esta andando.
Solo falla cuando el exe no es el mismo, ejemplo: lo ejecutas desde un zip, pero es un pormenor sin importancia.

Aquí discutian el tema.

Saludos.

BeRSeRKeR

 Otra opción que tiene que funcionar es crear un Mutex con CreateMutex. Si ya existía un mutex con el mismo nombre, GetLastError devolverá ERROR_ALREADY_EXISTS, por lo que habrá que salir de la aplicación.


HANDLE hMutex = CreateMutex(NULL, FALSE, "ElNombreDelMutexDeMiAplicacion");

if (GetLastError() == ERROR_ALREADY_EXISTS)  
   return -1;    // Salimos de la aplicación


Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Pogacha

 Parece "la solución" ya que la mecanica es multiplataforma inclusive. Aun que la solución de [EX3] parece mas directa verdad.

Saludos.
PD: Tener que dar vueltas en un tema como este te hace pensar cuanto mas fácil podría ser abrir una verduleria.  :P  

[EX3]

 BeRSeRKeR, llevaba tiempo viendo por encima el tema de los Mutex en la MSDN, informandome de que eran y para que servian. Entre un tutorial de Inno Setup Compiler, para evitar arrancar una instalacion si tu programa se esta ejecutando, y tu breve explicacion ya me ha quedado totalmente claro el tema (ole)

Cita de: "Pogacha"Parece "la solución" ya que la mecanica es multiplataforma inclusive. Aun que la solución de [EX3] parece mas directa verdad.
En mi opinion, el metodo del App.PrevInstance es muy directo y facil de implementar, pero creo que daria mucha mas fiabilidad lo del uso de Mutex ya que no se exactamente en que sistema se basa el otro metodo y la fiabilidad del mismo (la MSDN no lo aclara)

Por cierto, en la discursion que pusistes el enlace, visto por encima no veo que hagan referencia al App.PrevInstance del VB (mas que nada por que solo he visto codigo en C++). Ahi discutian sobre el uso de Mutex o listar las ventanas con FindWindow() y buscar por el titulo de la ventana para comporbar coincidencias (metodo que personalmente no me gusta y depende que casos puede ser poco fiable)

Cita de: "Pogacha"PD: Tener que dar vueltas en un tema como este te hace pensar cuanto mas fácil podría ser abrir una verduleria.  :P
Yo a veces me pregunto por que deje el dibujo :P

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.