Impedir que o sistema abra várias vezes
Moderador: Moderadores
depois de esquentar os dedos. achei no ng do clipper 53 a solução
o 16 abre o arquivo e modo exclusivo
Arrumei ele pois em 6 maquinas com o xp, em duas nao funcionou como estava antes e nem no win 98.
agora ficou legal
o 16 abre o arquivo e modo exclusivo
Arrumei ele pois em 6 maquinas com o xp, em duas nao funcionou como estava antes e nem no win 98.
agora ficou legal
Código: Selecionar todos
**********************************
Function TravaJan()
if ! file("C:\DBF1\CONTROLE.SYS")
errhandle:= fcreate("C:\DBF1\CONTROLE.SYS", 1)
fwrite(errhandle,"[ Arquivo de Controle do Sistema ]")
FClose(errhandle)
errhandle:= fopen("C:\DBF1\CONTROLE.SYS",16)
if ferror() > 0
Cls
Alert("O Sistema ja esta sendo executado! Olhe na barra de tarefa...")
Return(.f.)
endif
else
errhandle:= fopen("C:\DBF1\CONTROLE.SYS",16)
if ferror() > 0
Cls
Alert("O Sistema ja esta sendo executado! Olhe na barra de tarefa...")
Return(.f.)
endif
EndIf
Return(.t.)
Editado pela última vez por Daniel em 17 Mar 2006 21:39, em um total de 1 vez.
Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Parceiros Marcelo e Daniel...
Lamento informar mas... Nenhum dos 2 exemplos funcionam no XP...
Continuo entrando no mesmo sistema 4664276536 vezes simultâneamente....
Lamento informar mas... Nenhum dos 2 exemplos funcionam no XP...
Continuo entrando no mesmo sistema 4664276536 vezes simultâneamente....
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Marcelo,
Você tem razão, mas se for só um EXE para todas as estações usarem simultaneamente. Eu uso vários EXE, um para cada estação/aplicação.
É que eu alugo meus sistemas por mês e por estação, então crio um EXE específico para cada estação, com prazos de validade independentes (anotados dentro deles mesmos), ficando cada EXE em um HD local ou todos juntos no servidor (quando não há HD local).
Com isso, meus clientes ficam livres para decidir quais EXE eles vão querer atualizar: o cliente X, por exemplo, com 5 atendentes (5 EXE), pode resolver pagar só por 3 EXE em abr-2006, já que 2 atendentes vão sair de férias. Sem problema:
- os 2 EXE não atualizados não vão rodar porque expirou a validade;
- 3 EXE atualizados vão rodar e, se houver a tentativa de um segundo acesso simultaneo (local ou via rede) a um deles, vai aparecer o "acesso negado".
E, como eu guardo a data de validade (entre outras informações, como senhas, impressora padrão etc.) dentro de cada EXE, não preciso usar arquivos extras de configuração. Fica, como vc diz, mais simples.
Abraço.
Eolo
Você tem razão, mas se for só um EXE para todas as estações usarem simultaneamente. Eu uso vários EXE, um para cada estação/aplicação.
É que eu alugo meus sistemas por mês e por estação, então crio um EXE específico para cada estação, com prazos de validade independentes (anotados dentro deles mesmos), ficando cada EXE em um HD local ou todos juntos no servidor (quando não há HD local).
Com isso, meus clientes ficam livres para decidir quais EXE eles vão querer atualizar: o cliente X, por exemplo, com 5 atendentes (5 EXE), pode resolver pagar só por 3 EXE em abr-2006, já que 2 atendentes vão sair de férias. Sem problema:
- os 2 EXE não atualizados não vão rodar porque expirou a validade;
- 3 EXE atualizados vão rodar e, se houver a tentativa de um segundo acesso simultaneo (local ou via rede) a um deles, vai aparecer o "acesso negado".
E, como eu guardo a data de validade (entre outras informações, como senhas, impressora padrão etc.) dentro de cada EXE, não preciso usar arquivos extras de configuração. Fica, como vc diz, mais simples.
Abraço.
Eolo
O problema é que eu tenho um cliente com 12 estações burras (sem HD) acessando um servidor Linux, neste caso não tem como eu ter um EXE no HD então só funciona da forma que eu postei.
Até logo.
Marcelo
Até logo.
Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Eolo,
Para testar o que está acontecendo fiz o seguinte:
@ 10,20 Say Arq1:=Fopen(´C:\Orcament\Orcament.exe´,2)
O resultado foi -1 no primeiro acesso.
Uso Clipper 5.2e e o Blinker 7.0.
Agora lhe pergunto pq não entendí sua lógica: Se o arquivo já está sendo executado parece ser claro o que está ocorrendo, não é possível abrí-lo com Fopen na primeira vez e o retorno é -1 ...
Para testar o que está acontecendo fiz o seguinte:
@ 10,20 Say Arq1:=Fopen(´C:\Orcament\Orcament.exe´,2)
O resultado foi -1 no primeiro acesso.
Uso Clipper 5.2e e o Blinker 7.0.
Agora lhe pergunto pq não entendí sua lógica: Se o arquivo já está sendo executado parece ser claro o que está ocorrendo, não é possível abrí-lo com Fopen na primeira vez e o retorno é -1 ...
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
uso assim:
Código: Selecionar todos
cls
use usuario index usuario shared
nomeusu=left(alltrim(netname()),8)
dbseek(nomeusu,.f.)
if !found()
append blank
repla usuario with nomeusu, ativo with .t.
unlock
elseif ativo
alert("Programa Ja Esta Aberto Nesta Estacao !!")
cls
quit
else
rlock()
repla ativo with .t.
unlock
endif
alert("Beleza, posso usar o programa !!!")
sele usuario
dbseek(nomeusu,.f.)
rlock()
repla ativo with .f.
cls
quit
Editado pela última vez por Pablo César em 23 Mar 2013 04:55, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Grings,
O sistema operacional, quando abre o EXE, não o faz "exclusive". Se fosse assim, essa nossa discussão toda não teria sentido, já que um segundo acesso ao EXE não seria possível automaticamente, certo?...
Então, nada impede que o próprio EXE, carregado na memória, abra o EXE no disco. Com o FOPEN("...",2), aí sim, ele fica "exclusive", porque ele é aberto como leitura/escrita.
Eu, em meus programas, uso desde sempre esse processo, para guardar (dentro do EXE) senhas, data de vencimento, etc. etc. Como eu uso o Clipper52c e Blinker51, testei aqui com Clipper52c e Blinker70 e também pedi para um amigo meu, de Portugal, fazer a mesma coisa (Clipper 52e e Blinker70). Funcionou tudo sem problemas.
Uma única coisa que me ocorre agora: eu uso o modo PROTEGIDO. Vc também?
Abraço.
Eolo
O sistema operacional, quando abre o EXE, não o faz "exclusive". Se fosse assim, essa nossa discussão toda não teria sentido, já que um segundo acesso ao EXE não seria possível automaticamente, certo?...
Então, nada impede que o próprio EXE, carregado na memória, abra o EXE no disco. Com o FOPEN("...",2), aí sim, ele fica "exclusive", porque ele é aberto como leitura/escrita.
Eu, em meus programas, uso desde sempre esse processo, para guardar (dentro do EXE) senhas, data de vencimento, etc. etc. Como eu uso o Clipper52c e Blinker51, testei aqui com Clipper52c e Blinker70 e também pedi para um amigo meu, de Portugal, fazer a mesma coisa (Clipper 52e e Blinker70). Funcionou tudo sem problemas.
Uma única coisa que me ocorre agora: eu uso o modo PROTEGIDO. Vc também?
Abraço.
Eolo
Grings,
Para reforçar o que eu disse: todos os meus sistemas têm uma data de vencimento e ela fica gravada dentro do EXE. Quando vence o prazo, eu mando um arquivo para cada cliente, com 14bytes, contendo informações para "carregar" mais um mês. Aí uma rotina, no meu programa, lê esse arquivo de atualização, desencripta ele e grava uma nova data de vencimento, via FOPEN() e FWRITE(), no próprio arquivo EXE que está rodando na mémória...
Uso isso há anos.
Eolo
Para reforçar o que eu disse: todos os meus sistemas têm uma data de vencimento e ela fica gravada dentro do EXE. Quando vence o prazo, eu mando um arquivo para cada cliente, com 14bytes, contendo informações para "carregar" mais um mês. Aí uma rotina, no meu programa, lê esse arquivo de atualização, desencripta ele e grava uma nova data de vencimento, via FOPEN() e FWRITE(), no próprio arquivo EXE que está rodando na mémória...
Uso isso há anos.
Eolo
depois de esquentar os dedos. achei no ng do clipper 53 a solução
o 16 abre o arquivo e modo exclusivo
Arrumei ele pois em 6 maquinas com o xp, em duas nao funcionou como estava antes e nem no win 98.
agora ficou legal
o 16 abre o arquivo e modo exclusivo
Arrumei ele pois em 6 maquinas com o xp, em duas nao funcionou como estava antes e nem no win 98.
agora ficou legal
Código: Selecionar todos
If ! TravaJan()
Cls
Quit
EndIf
********************************
Function TravaJan()
if ! file("C:\DBF1\CONTROLE.SYS")
errhandle:= fcreate("C:\DBF1\CONTROLE.SYS", 1)
fwrite(errhandle,"[ Arquivo de Controle do Sistema ]")
FClose(errhandle)
errhandle:= fopen("C:\DBF1\CONTROLE.SYS",16)
if ferror() > 0
Cls
Alert("O Sistema ja esta sendo executado! Olhe na barra de tarefa...")
Return(.f.)
endif
else
errhandle:= fopen("C:\DBF1\CONTROLE.SYS",16)
if ferror() > 0
Cls
Alert("O Sistema ja esta sendo executado! Olhe na barra de tarefa...")
Return(.f.)
endif
EndIf
Return(.t.)
Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Corrigindo a rotina que postei logo no início ...
Desde que que não seja usado um DbCloseAll() ou Close Databases...
Código: Selecionar todos
DbUseArea(.F.,NIL,'STATUS.DBF',NIL,NIL,.T.)
If NetErr()
Alert('O programa ja esta aberto em outra janela! Pressione qualquer tecla e, apos, maximize-o, com o mouse, na barra de tarefas...')
Quit
Else
Use Status.DBF New
EndIf
Editado pela última vez por Pablo César em 23 Mar 2013 04:55, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Impedir varias vezes
Ola galera, pelos exemplos que eu vi, todos são linkados com blinker. eu ainda estou me adaptando com o mesmo. Atualmente eu uso o rtlink. Da para linkar com ele 
grato
Josmar
grato
Josmar
