hola. Mi inquietud es si con visual basic se pude saber si un exe se esta ejecutando no .
Gracias !!!
Sebastian.-
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 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 WinSalu2...
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" ...
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!
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...
Yo hace mucho que no toco el VB, pero recuerdo que utilizaba el App.PrevInstance y no me fallaba.
Saludos
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.
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.
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
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...