elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?  (Leído 3,190 veces)
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« en: 19 Agosto 2008, 17:54 pm »

tengo la siguiente situacion:

en el LOAD de un form cualquiera tengo ete codigo para evitar que se ejecute 2 veces el programa:
Código:
            If App.PrevInstance = True Then 'si ya se esta ejecutando
              End 'entonces finalizamos
            End If

ahora bien, el form tiene un boton para reiniciar la aplicacion es un simple boton "CMDREINICIAR" cuyo codigo es:

Código:
 Dim RET 
 RET = Shell(App.path & "\" & App.EXEName & ".exe", 1) 'la instruccion para reiniciar (pero no va a reiniciar)
 End 'finaliza el exe

y como se daran cuenta el programa se cierra pero ya no reinicia pues en el load se esta condicionando.

¿Cual sera la forma de reiniciar un EXE pero a la vez cuidar de que este no se ejecute 2 veces?



En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« Respuesta #1 en: 19 Agosto 2008, 18:12 pm »

Podrias hacer algo asi

Código
  1. Option Explicit
  2.  
  3. Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
  4.  
  5. Private Sub Command1_Click()
  6.    Call SetEnvironmentVariable("RESTARTED", "1")
  7.    Call Shell(App.Path & "\" & App.EXEName & ".exe", vbNormalFocus)
  8.    Call Unload(Me)
  9. End Sub
  10.  
  11. Private Sub Form_Load()
  12.    If App.PrevInstance Then
  13.        If Not Environ$("RESTARTED") = "1" Then
  14.            Gosub Quit:
  15.        End If
  16.    End If
  17.  
  18.    '// Your Code Here
  19.  
  20.    Exit Sub
  21.  
  22. Quit:
  23.    Call Unload(Me)
  24. End Sub
  25.  
  26.  


« Última modificación: 19 Agosto 2008, 18:16 pm por cobein » En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« Respuesta #2 en: 19 Agosto 2008, 18:46 pm »

Excelente COBEIN, entiendo lo de las variables de entorno, habia tenido la misma idea pero con un interruptor( tu lo llamaste "RESTARTED" ) guardado en un archivo y preguntar desde ahi pero veo que es mucho mas elegante tu solucion y mas rapida claro, hace tiempo vi que las instrucciones GOTO y GOSUB no eran recomendadas (asi como el abrupto END) asi que lo cambie por esto, y funciona:
¿por que END en vez de Unload? pues quiza se quede algun form abierto por ahi, en fin... gracias por tu ayuda

Código
  1. Option Explicit
  2. Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
  3.  
  4. Private Sub Command1_Click()
  5.    Call SetEnvironmentVariable("FLAG", "1")
  6.    Call Shell(App.Path & "\" & App.EXEName & ".exe", vbNormalFocus)
  7.    End
  8. End Sub
  9.  
  10. Private Sub Form_Load()
  11.    If App.PrevInstance = True Then
  12.        If Not Environ$("FLAG") = "1" Then
  13.          End
  14.        End If
  15.    End If
  16.  
  17. End Sub
  18.  
  19.  

PD.- que pasa con la variable creada? se borra? parece que si pues voy a la consola escribo SET y no existe tales variables. ¿o donde estan?
En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« Respuesta #3 en: 19 Agosto 2008, 18:58 pm »

Se puede hacer asi sin necesidad de usar gosub, con respecto al end no es recomendado para nada, aparte se supone que esta es la primer funcion asi que no tendria que haber nada cargado exepto el form de inicio.

Con respecto a las variables de entorno, son locales no globales

Código
  1. Private Sub Form_Load()
  2.    If App.PrevInstance and _
  3.         Not Environ$("RESTARTED") = "1" Then
  4.            Call Unload(Me)
  5.    Else
  6.        '// Your Code Here
  7.    End If
  8.  
  9. End Sub
En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
krackwar


Desconectado Desconectado

Mensajes: 900


Ver Perfil
Re: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« Respuesta #4 en: 20 Agosto 2008, 06:21 am »

Se puede hacer asi sin necesidad de usar gosub, con respecto al end no es recomendado para nada, aparte se supone que esta es la primer funcion asi que no tendria que haber nada cargado exepto el form de inicio.

Con respecto a las variables de entorno, son locales no globales

Código
  1. Private Sub Form_Load()
  2.    If App.PrevInstance and _
  3.         Not Environ$("RESTARTED") = "1" Then
  4.            Call Unload(Me)
  5.    Else
  6.        '// Your Code Here
  7.    End If
  8.  
  9. End Sub
Con mutex tambien se podria hacer.
En línea

Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como?
« Respuesta #5 en: 20 Agosto 2008, 06:55 am »

Si, se puede hacer con mutex, archivo, memoria, registro, dde, linea de comandos o cualquier cosa que te permita crear un flag, tambien podrias ver que proceso lo ejecuto o usar CreateProcess y pasarle los flags o mil cosas mas,  gracias por el dato.
En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines