Página 1 de 1

Travar 2 execucoes do sistema clipper no xp

Enviado: 16 Nov 2004 11:34
por managercorp
To falando daquela funcao que bloqueia que se
abra mais de uma vez o mesmo programa.

No windows 98 o travajan() funciona beleza
no xp nao da certo
alguem tem alguma solucao ?

Enviado: 17 Nov 2004 00:26
por rrfsistemas
Caro Alexandre :



Eu faço um arquivo como flag de abertura do sistema na máquina cliente, ou seja, quando o sistema é executado crio um arquivo chamado siadem.sys com uma string "ON" sinalizando que o arquivo está em execução.

Quando saio do sistema este arq é apagado.

Existe uma rotina que verifica se o arquivo existe e se a string este On caso contrario o sistema será executado normalmente.

Enviado: 17 Nov 2004 10:52
por Everton
Olá Alexandre, desculpe não tem nada a ver com o tópico, mas vc poderia me indicar onde posso conseguir esta função TRAVAJAN(), pois estou com problemas desse tipo em alguns.

mich.cpd@terra.com.br

Grato pela Atenção

Enviado: 17 Nov 2004 11:07
por kenew
Uma pergunta que tem a ver com o assunto, o clipper ele cria um arquivo temporario para casa execução do executavel, tipo "AB9R7DFJ" bom não tempo como o executavel saber q arquivo o programa esta criando, assim poderiamos checar se existir não deixar abrir o executavel novamente.

E no caso deste TRAVAJAN() como ele faz quando o sistema termina inesperadamente ou quando a mumia do usuario miniza a janela e fecha o sistema pelo modo não convencional.

Enviado: 17 Nov 2004 23:11
por Clipper
Prezados Colegas

A TRAVAJAN funciona perfeitamente mesmo que o sistema "caia" ou que o usuário feche o programa de outra maneira que não seja a correta, quanto ao problema dela no XP realmente vamos ter que fazer de outra forma.

Até logo.

Marcelo

Enviado: 18 Nov 2004 09:52
por kenew
Opa então to nessa ... se alguem puder me enviar esta função eu quero.

Obrigado

AI VAI GALERA

Enviado: 18 Nov 2004 12:45
por managercorp
FUNCAO PARA NAO ABRIR MAIS DE UMA COPIA NO MESMO MICRO
ATENCAO SO FUNCIONA O WIN98 NO XP NAO FUNCIONA
SE ALGUEM DESCOBRIR ME PASSEM POR EMAIL
solucoeshotel@bol.com.br
quando pedi a solucao para Xp
o usuario rrfsistemas falou para criar um arquivo .sys, mas ante mao eu aviso que nao funciona pois se resetar a maquina ou mesmo sair com alt+c o sys nao sera apagado e a solucao nao funcionara.
esta que coloco aqui para o 98 funciona de qualquer forma, mesmo que
o usuario desligie, reset.
*****************************************
* coloque estas linhas no inicio do sistema

XVERWIN='N'
IF FILE("C:\WINDOWS\WIN.INI")
XVERWIN='S'
ENDIF
IF XVERWIN='S'
travajanJ()
if travajanJ()=.F.
CLEAR
ALERT("ATENCAO: O Sistema ja Esta em Uso Nesta Estacao, Execute a Barra do Sistema Minimizado no seu Windows")
clear
QUIT
ENDIF
ENDIF

*************
FUNCTION TRAVAJANJ
IF !FILE("C:\WINDOWS\CONTROLE.INI")
VA=FCREATE("C:\WINDOWS\CONTROLE.INI",0)
FWRITE(VA,"[ Arquivo de Controle do Sistema ]")
FCLOSE(VA)
ELSE
VA=FOPEN("C:\WINDOWS\CONTROLE.INI",1)
IF FERROR()<>0
CLS
@ 02,00 SAY "O Sistema ja esta sendo executado..."
@ 03,00 SAY STRZERO(FERROR(),3)
@ 04,00 SAY STRZERO(VA,3)
@ 05,00 SAY REPLICATE("=",40)
RETURN(.F.)
ENDIF
ENDIF
RETURN(.T.)

Enviado: 18 Nov 2004 16:18
por Clipper
Prezados Colegas

A função TRAVAJAN foi desenvolvida por mim a bastante tempo, só que na versão original eu deixo o sistema criar o arquivo CONTROLE.INI no diretório corrente porque existe um problema em criar em uma pasta especifica. Exemplo : Se o windows do usuário não estiver no diretório que foi especificado irá dar problema.

Segue abaixo o código original

Código: Selecionar todos

*---------------------------------------------------------------*
* Esta fun?Æo impede que um sistema seja aberto mais de uma vez *
* fa?a a cahamada dela no inicio do sistema                     *
* Exemplo                                                       *
* IF TRAVAJAN()=.F.                                             *
*    //Sai do sistema
*    QUIT // Ou RETURN  
* ENDIF
*                                                               *
*---------------------------------------------------------------*
*-----------------*
 FUNCTION TRAVAJAN
*-----------------*
IF !FILE("CONTROLE.INI")
   VA=FCREATE("CONTROLE.INI",1)
   FWRITE(VA,"[ Arquivo de Controle do Sistema ]")
ELSE
   VA=FOPEN("CONTROLE.INI",1)
   IF FERROR()<>0
      CLS
      @ 02,00 SAY "O Sistema ja esta sendo executado..."
      @ 03,00 SAY STRZERO(FERROR(),3)
      @ 04,00 SAY STRZERO(VA,3)
      @ 05,00 SAY REPLICATE("=",40)
      RETURN(.F.)
   ENDIF
ENDIF
RETURN(.T.)

*** Antes de finalizar o sistema é recomendável usar
***FCLOSE(VA)
***
Apesar deste código funcionar perfeitamente, eu preferi fazer e usar uma outra versão que funciona em rede gravando o arquivo no diretório padrão do servidor, para tanto na criação do arquivo eu insiro o número da estação na extensão do nome do arquivo. Exemplo :

CONTROLE.001 = Estação 1
CONTROLE.002 = Estação 2

Neste caso cada estação terá uma variável de ambiente especificando o número da estação. No meu caso eu uso uma chamada WKSNET.

Quanto a ele não funcionar no XP ainda estou tentando resolver isso, eita versão mais fd... de Rwindows...:x:x:x:x:x:x:x:x:x:x

Até logo.

Marcelo

Enviado: 19 Nov 2004 09:25
por kenew
Ainda insito na idéia de utilizar o nome do arquivo temporario q o executavel cria automaticamente, será q não tem como obter o nome deste arquivo para saber se o exe já esta aberto, assim não teria problemas com WIN98, XP ou qualquer outro.

Enviado: 19 Nov 2004 09:34
por Clipper
Prezado Kenew

Vejo 2 problemas.

1 - Acho muito dificil que consigamos pegar o nome do arquivo temporário, principalmente porque é aleatório.

2 - Se ele é criado na entrada do executável de forma aleatória vai ser criado provavelmente com outro nome tornando impossível fazer o proposto.

Já fiz vários testes com várias funções de tratamento de arquivos porém não obtive exito com nenhuma, acabou de me ocorrer uma idéia...vou testar... volto já...

Até logo.

Marcelo

Enviado: 19 Nov 2004 10:03
por Clipper
Resolvido o problema...

Código: Selecionar todos

CLS
NOME=SPACE(50)

TRAVA=TRAVAJANXP()
IF TRAVA=.F.
   RETURN
ENDIF

@ 05,00 SAY "NOME -> " GET NOME PICT "@!"
READ
RETURN

*-------------------*  
 FUNCTION TRAVAJANXP  
*-------------------* 
IF .NOT. FILE("CONTROLE.INI")
   aStructure := {} 
   aAdd( aStructure,{"CONTROL","C",1,0})
   dbCreate( "CONTROLE.INI",aStructure)
   USE CONTROLE.INI EXCLUSIVE
ELSE
   USE CONTROLE.INI EXCLUSIVE
   IF NETERR()
      CLS
      @ 02,00 SAY "O Sistema ja esta sendo executado nesta estacao"
      @ 03,00 SAY STRZERO(FERROR(),3)
      @ 04,00 SAY REPLICATE("=",50)
      INKEY(0)
      RETURN(.F.)
   ENDIF
ENDIF
// LEMBRAR DE NO FINAL DO SITEMA FECHAR O ARQUIVO 
// OBVIAMENTE QU SE VOCE USAR UM DBCLOSEALL() NAO PRECISA SE PREOCUPAR
RETURN(.T.)
Até logo.

Marcelo