Autor
|
Tema: reiniciar EXE y a la vez no permitir otra instancia del mismo ¿como? (Leído 3,214 veces)
|
yovaninu
Desconectado
Mensajes: 349
|
tengo la siguiente situacion: en el LOAD de un form cualquiera tengo ete codigo para evitar que se ejecute 2 veces el programa: 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: 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
|
Podrias hacer algo asi Option Explicit Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long Private Sub Command1_Click() Call SetEnvironmentVariable("RESTARTED", "1") Call Shell(App.Path & "\" & App.EXEName & ".exe", vbNormalFocus) Call Unload(Me) End Sub Private Sub Form_Load() If App.PrevInstance Then If Not Environ$("RESTARTED") = "1" Then Gosub Quit: End If End If '// Your Code Here Exit Sub Quit: Call Unload(Me) End Sub
|
|
« Última modificación: 19 Agosto 2008, 18:16 pm por cobein »
|
En línea
|
|
|
|
yovaninu
Desconectado
Mensajes: 349
|
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 Option Explicit Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long Private Sub Command1_Click() Call SetEnvironmentVariable("FLAG", "1") Call Shell(App.Path & "\" & App.EXEName & ".exe", vbNormalFocus) End End Sub Private Sub Form_Load() If App.PrevInstance = True Then If Not Environ$("FLAG") = "1" Then End End If End If End Sub
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
|
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 Private Sub Form_Load() If App.PrevInstance and _ Not Environ$("RESTARTED") = "1" Then Call Unload(Me) Else '// Your Code Here End If End Sub
|
|
|
En línea
|
|
|
|
krackwar
Desconectado
Mensajes: 900
|
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 Private Sub Form_Load() If App.PrevInstance and _ Not Environ$("RESTARTED") = "1" Then Call Unload(Me) Else '// Your Code Here End If End Sub
Con mutex tambien se podria hacer.
|
|
|
En línea
|
Mi blogBienvenido 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
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
única instancia de programa en windows
Programación General
|
Ikku
|
2
|
2,010
|
18 Febrero 2012, 19:35 pm
por Ikku
|
|
|
[SOLUCIONADO] Como evitar que se abra otra instancia de un JFrame?
Java
|
chequinho
|
2
|
13,204
|
13 Marzo 2012, 07:08 am
por chequinho
|
|
|
Evitar abrir la misma instancia de un JInternalFrame al mismo tiempo
Java
|
KeyPy HH
|
2
|
9,392
|
6 Septiembre 2012, 05:32 am
por gardoelhacker
|
|
|
Este ransomware es otra razón de peso para no permitir que el navegador ...
Noticias
|
wolfbcn
|
0
|
12,494
|
4 Agosto 2017, 21:01 pm
por wolfbcn
|
|
|
Duda - Como restringir la aplicacion a una instancia?
.NET (C#, VB.NET, ASP)
|
OscarCadenas_91
|
4
|
2,887
|
23 Febrero 2018, 06:10 am
por OscarCadenas_91
|
|