Página 1 de 2

Verificar se o programa já está sendo executado

Enviado: 19 Jun 2007 21:53
por JUNALY
Caros amigos, Boa noite.
Gostaria de saber se existe algum comando ou função para eu saber, dentro do próprio programa, se ele já está sendo executado na rede.
Abraços,

Enviado: 20 Jun 2007 00:31
por Maligno
Não existe comando ou função nativa pra isso. Mas, sem pensar muito profundamente no problema, acho que você poderia criar um semáforo em arquivo. Deve resolver. Muito embora eu saiba que podem ocorrer certas "complicações" nessa solução.

Enviado: 20 Jun 2007 08:28
por Eolo
Uma solução simples: no início do seu programa, abra um arquivo qualquer no servidor, com o FOPEN(), em modo exclusivo, e deixe ele aberto direto. Se o programa estiver rodando e vc tentar abrir em outra janela (ou outra estação), o FOPEN() vai retornar erro, aí vc sabe que ou a rede tá fora do ar ou o programa já está aberto em outra janela...

E isso serve pra Clipper ou xHarbour.

Enviado: 20 Jun 2007 08:58
por Maligno
Tenho a ligeira impressão de que o colega quer apenas saber SE o mesmo programa está aberto em algum outro ponto da rede. Talvez até para atualização do sistema. Muito útil, aliás.
Mas se ele deixar esse "arquivo semáforo" sempre aberto, como você sugere, ele acabará bloqueando a execução do programa. Acho que não é essa a intenção.

Agradecimento.

Enviado: 20 Jun 2007 09:44
por JUNALY
Obrigado a ambos, usei a solução do Eolo e deu certo para o que eu queria..
Abraços,

retificação

Enviado: 20 Jun 2007 09:45
por JUNALY
A solução utilizada foi a do Maligno.

Enviado: 20 Jun 2007 10:41
por sygecom
JUNALY
Obrigado a ambos, usei a solução do Eolo e deu certo para o que eu queria..
Abraços,

JUNALY
A solução utilizada foi a do Maligno.
Tche, o mais importante é que resolveu....

Abraços
Leonardo Machado

Enviado: 20 Jun 2007 11:33
por Eolo
Maligno,

O "deixar o arquivo semáforo sempre aberto" é só durante a execução do EXE! Saiu dele, o semáforo é obviamente liberado (não precisa nem fechar o arquivo, o Clipper faz isso). Então, o semáforo só vai bloquear uma 2a. instância do mesmo EXE. No caso de "atualização do sistema", basta o Administrador bloquear o semáforo: o usuário não vai conseguir entrar e aí o Adm atualiza o que for necessário.

Eu não vi nenhum caso em que essa idéia do FOPEN() não funcione. Se vc tiver algum exemplo, manda aí!

Enviado: 20 Jun 2007 15:16
por Maligno
Desculpe, Eolo. Da forma como você colocou, a impressão que me deu é que você sugeria o bloqueio da execução do programa, a fim realmente de evitar que, a qualquer tempo, alguém o executasse.
Mas como bloqueio temporário, a fim de atualizar o sistema, sim, eu concordo com o uso de um semáforo por arquivo.
Esse sistema funciona. Você próprio afirma isso. Então, pra quê você quer mais exemplos? Não entendi.

Enviado: 20 Jun 2007 15:55
por Eolo
Maligno, ops... achei que vc tinha alguma restrição ao semáforo e tivesse algum exemplo, só isso. Tamos falando a mesma coisa :-)

Enviado: 20 Jun 2007 16:00
por Maligno
Não. Restrição nenhuma. Esse tipo de semáforo tem sua utilidade. Só reitero que existem sim, algumas "complicações" quando se utiliza este recurso para monitorar constantemente quem está usando o que e onde. Mas para o caso do colega, se for para atualização de sistema, é tranqüilo.

Enviado: 28 Jun 2007 18:11
por Clipper
Seguinte : Não querendo atrapalhar mas já atrapalhando, a opção do Eolo funciona muito bem no Windows 98/95/ME, no XP não funciona (no 2000 não testei), pois mesmo que se abra o arquivo no modo somente leitura ele retorna que o arquivo está liberado, só acontece isso no XP, eu sei porque tenho uma função que verifica se o programa já está em execução e no XP ela não funcionava, mudei a função usando DBF e USE EXCLUSIVE normalmente e funciona agora em qualquer SO.

Ps. O Julio (Junaly) me ligou e disse que teve esse problema, estava funcionando no 98/95 mas não no XP, então expliquei a ele o motivo.

Até logo.

Marcelo

Enviado: 28 Jun 2007 19:27
por Pablo César
Acho que qualquer comentário que adicione experiência, é válido, você não estaria atrapalhando, não é Eolo ?.
Clipper escreveu:a opção do Eolo funciona muito bem no Windows 98/95/ME, no XP não funciona (no 2000 não testei), pois mesmo que se abra o arquivo no modo somente leitura ele retorna que o arquivo está liberado, só acontece isso no XP
Estranho essa tua afirmação, pois quando eu fiz testes tambem em Xp e me parece que funcionou bem. Irei fazer novamente o teste em XP
Clipper escreveu:mudei a função usando DBF e USE EXCLUSIVE normalmente e funciona agora em qualquer SO.
Mas esta sua idéia não me parece errada não. assim como o Maligno, eu também tenho as minhas ressalvas. Eu há uns anos atrás, tinha aberto uma sessão sobre chamar aplicativos em multi-sessão. E eu agoar não consigo lembrar quais seriam os motivos que impediam que o sistema rodasse 100% sem abrir em multi-sessão.

Ja me há acontecido situações em que o usuário desligue, ou até mesmo haja uma queda de energia o arquivo ainda ficara aberto e o jeito era desligar o servidor. Isto tudo em certaz ocasiões, difícil diagnosticar mas eu me ví já nessa situação.

Será que isso só aconteceu comigo somente ?

Enviado: 28 Jun 2007 19:38
por Eolo
...pois mesmo que se abra o arquivo no modo somente leitura ele retorna que o arquivo está liberado, só acontece isso no XP, eu sei porque tenho uma função que verifica se o programa já está em execução e no XP ela não funcionava...
Clipper,

Estranha a sua afirmação, pq eu uso isso na minha rede e em todos os meus clientes, e funciona normal em todos, com o XP ou não.

POSTa a sua função onde vc usa o FOPEN() em modo exclusivo (que NÃO funciona) pra gente dar uma olhada? Cara, DBF Exclusive funciona e o FOPEN() Exclusive não funciona? Voodoo!

Enviado: 28 Jun 2007 19:46
por Pablo César
Ahh lembrei de algo para o caso do USE DBF EXCLUSIVE der errado... Claro quevâo me dizer... mas isso é erro de programação... mas se o programador fechar (sem querer com CLOSE ALL) por exemplo ? E quanto à memória ocupada entre USE DBF e FOPEN FILE_NULO ?