Como hago que mi .exe no se ejecute 2 veces
lo que se me ocurre es creas una tabla que se llame CONTADOR con un campo numerico de 1 digito en el cual le decis al programa que cada vez que se inicio, el campo numerico va a ser 1 y cuando salgas va hacer 0 de esta formas haces una instruccion si al entrar nuevamente esta en 1 es por que ya se esta usando. y por ende no se pueda ejecutar dos veces aprate es una muy sencillo de hacerlo espero te sierva y si no hace como te dijo alex abrilo una sola vez y listo. jajja
Jomahak.
Quetal primero aclaro soy Alex Vargas no el tocayo anterior.
Bueno ese problema lo resolvi de la siguiente manera:
1- Identifique cada uns de las PCs creando una variable en el autoexec.bat asi.
Set WrkStId =<Un numero unico que le asignas a cada PC>
Como asertadamente dijo loginsistemas, cre茅 una tabla de control en donde se registra cada pc que tiene cargado el EXE, haciendo uso de la variable WrkStId (Work Station ID).
la cual recuperas desde fox asi:
GETENV("WrkStId")
Ejem.
PCEntra=GETENV("WrkStId")
En este caso PCEntra tiene el valor que se guargar谩 en el campo de la tabla control, adem谩s este valor lo usaras en el PRG principal para revisar si la PC en que se intenta ejecutar el programa ya est谩 registrada en la tabla, si es asi muestra mensaje y cancela.
creo que hay una funci贸n que checa si el exe est谩 siendo usado, si la encuantro te aviso ok.
Alex Vargas
Quetal primero aclaro soy Alex Vargas no el tocayo anterior.
Bueno ese problema lo resolvi de la siguiente manera:
1- Identifique cada uns de las PCs creando una variable en el autoexec.bat asi.
Set WrkStId =<Un numero unico que le asignas a cada PC>
Como asertadamente dijo loginsistemas, cre茅 una tabla de control en donde se registra cada pc que tiene cargado el EXE, haciendo uso de la variable WrkStId (Work Station ID).
la cual recuperas desde fox asi:
GETENV("WrkStId")
Ejem.
PCEntra=GETENV("WrkStId")
En este caso PCEntra tiene el valor que se guargar谩 en el campo de la tabla control, adem谩s este valor lo usaras en el PRG principal para revisar si la PC en que se intenta ejecutar el programa ya est谩 registrada en la tabla, si es asi muestra mensaje y cancela.
creo que hay una funci贸n que checa si el exe est谩 siendo usado, si la encuantro te aviso ok.
Alex Vargas
Estas dos funciones tienes que ponerla en un programa de procedimientos establecido con set procedure
y luego desde tu prg principal llamas a la funcion :
IF !YaActiva()
Ejecutas el programa
ELSE
sino un mensaje que te diga que la aplicacion ya esta activa. O simplementa cierras el programa.
ENDIF
Con esta funci贸n podemos comprobar si nuestra aplicaci贸n de Visual FoxPro ya ha sido iniciada en una PC y as铆 no iniciarla nuevamente.
FUNCTION YaActiva()
LOCAL llReturn, lcCaption
llReturn = .F.
lcCaption = _SCREEN.Caption
*!* Renombra temporariamente el caption de la
*!* Aplicaci贸n
_SCREEN.Caption = "_" + lcCaption
IF IsActive(lcCaption)
*!* Si ya esta activo
MESSAGEBOX("Este sistema " + lcCaption + CHR(13) + "ya se encuentra activo",16,"Aviso", 5)
llReturn = .T.
ENDIF
_SCREEN.Caption = lcCaption
RETURN llReturn
ENDFUNC
*!*A esta funci贸n API se le debe pasar como par谩metro, el t铆tulo (caption) de la aplicaci贸n. ;
*!* Este par谩metro debe ser exactamente igual al t铆tulo de la ventana de la aplicaci贸n que queremos verificar:
FUNCTION IsActive(tcCaption)
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName
RETURN FindWindow(0, tcCaption) # 0
ENDFUNC
y luego desde tu prg principal llamas a la funcion :
IF !YaActiva()
Ejecutas el programa
ELSE
sino un mensaje que te diga que la aplicacion ya esta activa. O simplementa cierras el programa.
ENDIF
Con esta funci贸n podemos comprobar si nuestra aplicaci贸n de Visual FoxPro ya ha sido iniciada en una PC y as铆 no iniciarla nuevamente.
FUNCTION YaActiva()
LOCAL llReturn, lcCaption
llReturn = .F.
lcCaption = _SCREEN.Caption
*!* Renombra temporariamente el caption de la
*!* Aplicaci贸n
_SCREEN.Caption = "_" + lcCaption
IF IsActive(lcCaption)
*!* Si ya esta activo
MESSAGEBOX("Este sistema " + lcCaption + CHR(13) + "ya se encuentra activo",16,"Aviso", 5)
llReturn = .T.
ENDIF
_SCREEN.Caption = lcCaption
RETURN llReturn
ENDFUNC
*!*A esta funci贸n API se le debe pasar como par谩metro, el t铆tulo (caption) de la aplicaci贸n. ;
*!* Este par谩metro debe ser exactamente igual al t铆tulo de la ventana de la aplicaci贸n que queremos verificar:
FUNCTION IsActive(tcCaption)
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName
RETURN FindWindow(0, tcCaption) # 0
ENDFUNC