Como hago que mi .exe no se ejecute 2 veces

Jomahak
24 de Octubre del 2003
Como hago que mi .exe no se ejecute 2 veces

alex
24 de Octubre del 2003
e erp r3o dfdo

alex
24 de Octubre del 2003
pues ejecutalo una vez sola.

loginsistemas
24 de Octubre del 2003
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

Alex
24 de Octubre del 2003
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

Edwin Cadillo
24 de Octubre del 2003
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