averiguar si una aplicacion ya esta iniciada

12/01/2005 - 04:12 por julito | Informe spam
quisiera saber como limitar el nº de instancias de una
aplicacion, es decir quiero q una vez iniciada una
aplicacion cuando se vuelva a pulsar en el icono para
ejecutarla de nuevo no deja hacerlo mientras este otra
instancia en marcha. no se si me he explicado bien, vamos
q solo quiero q se ejecute una vez al mismo tiempo.

saludos a todos y gracias

Preguntas similare

Leer las respuestas

#6 Morgan
13/01/2005 - 04:44 | Informe spam
Fantastico Funciona de pelos ... :-) , Gracias, Obviamente cuando lo saque
sera con el CopyRight Correspondiente , Gracias

Saludos ... Miguel Angel Martínez Morgan ... 8-)
[MS-MVP-VB]

Eduardo A. Morcillo [MS MVP VB] <emorcilloATmvps.org> wrote:
Morgan, para VB6 seria algo asi:

CLASE PrevInstance:
-

Option Explicit

Private Declare Function CreateMutex Lib "kernel32" Alias
"CreateMutexA" ( _ ByVal lpMutexAttributes As Long, _
ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long

Private Const ERROR_ALREADY_EXISTS As Long = 183

Private m_bOwned As Boolean
Private m_lMutex As Long
Private m_bInit As Boolean

Private Sub Inicializar()

' Creo el mutex
m_lMutex = CreateMutex(0&, True, App.Title & App.Major &
App.Minor & App.Revision)

' Compruebo si se pudo crear el mutex
' y lanzo un error si no se pudo
If m_lMutex = 0 Then Err.Raise &H80070000 Or Err.LastDllError

' Compruebo si el mutex ya estaba creado por
' otra instancia
m_bOwned = Err.LastDllError <> ERROR_ALREADY_EXISTS

m_bInit = True

End Sub

Public Property Get PrevInstance() As Boolean

' Inicializo la clase si no lo esta
If Not m_bInit Then Inicializar

PrevInstance = Not m_bOwned

End Property

Private Sub Class_Terminate()

' Libero el mutex
CloseHandle m_lMutex

End Sub

Y para usarlo:

Dim m_oPrevInst As New PrevInstance

Private Sub Form_Load()

If m_oPrevInst.PrevInstance Then
MsgBox "Ya hay otra instancia"
End
End If

End Sub
Respuesta Responder a este mensaje
#7 Eduardo A. Morcillo [MS MVP VB]
13/01/2005 - 05:38 | Informe spam
Esto se verifica (si no me equivoco), con la propiedad boolean
App.PrevInstance.



Si, esa es la propiedad pero si cambias el nombre del ejecutable te devuelve
False en una segunda instancia, con lo cual no sirve si realmente se quieren
evitar varias instancias.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#8 Pedro Luna Montalvo, MVP
13/01/2005 - 19:28 | Informe spam
Ok!! Entonces imagino que la implementacion interna d esta propiedad busca a
un proceso con el mismo nombre, en lugar de usar la tecnica del MUTEX.

Buenoalgo nuevo se aprende cada dia

Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el
mensaje news:eitqGnS%
> Esto se verifica (si no me equivoco), con la propiedad boolean
> App.PrevInstance.

Si, esa es la propiedad pero si cambias el nombre del ejecutable te


devuelve
False en una segunda instancia, con lo cual no sirve si realmente se


quieren
evitar varias instancias.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#9 Eduardo A. Morcillo [MS MVP VB]
13/01/2005 - 22:47 | Informe spam
Ok!! Entonces imagino que la implementacion interna d esta propiedad
busca a un proceso con el mismo nombre, en lugar de usar la tecnica
del MUTEX.



Yo tengo entendido que App.PrevInstance utiliza un mutex (en algun lado lo
escuche o lei pero no lo puedo asegurar). El asunto es que nombre se le pone
al mutex. Si se usa el nombre del proceso entonces ocurre el problema del
que hablamos. Si se le pone un nombre que no cambie se le haga lo que se le
haga al ejecutable entonces si funciona como corresponde.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#10 Pedro Luna Montalvo, MVP
13/01/2005 - 23:25 | Informe spam
Yo tengo entendido que App.PrevInstance utiliza un mutex (en algun lado lo
escuche o lei pero no lo puedo asegurar). El asunto es que nombre se le


pone
al mutex. Si se usa el nombre del proceso entonces ocurre el problema del
que hablamos. Si se le pone un nombre que no cambie se le haga lo que se


le
haga al ejecutable entonces si funciona como corresponde.



Jaja, pos si le pone de nombre al mutex el nombre del proceso, que
chiste!?!?
Me daria lo mismo que buscar si existe en ejecucion un proceso con el nombre
de mi aplicacion.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida