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
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