Olá Rubens,
rubens escreveu:só achei que o flock() travava o arquivo.
Rubens, apenas esclarecendo para você saber a diferença entre um e outro:
A função
FLock() realmente bloquei (trava) o arquivo, mas outros usuários podem abri-lo no modo compartilhado para consulta, apenas não vai poder fazer alterações até que o arquivo seja liberado, mas ele consulta o arquivo.
Use <cFile> Exclusive, não permite nem mesmo outro usuário abri-lo para consulta. Ele fica visível apenas para o usuário que abri-lo de forma exclusiva, e para usar o ZAP, isso é necessário, ou seja, que nenhum outro usuário esteja acessando o arquivo.
rubens escreveu:Quando se tenta abrir em modo exclusivo e o arquivo já está sendo usado, ele não mostra automaticamente uma mensagem de erro

?
Não. Ao tentar abrir um arquivo aberto no modo Exclusivo, não provoca um RTE (
Run Time Error ou
Erro Em Tempo de Execução). Esse erro é retornado pela função
NetErr() que retorna .T. quando há erro ao tentar abrir um arquivo, bloquear um arquivo ou bloquear um registro.
rubens escreveu:Porque eu uso assim para não deixar o programa ser aberto duas vezes na mesma máquina...
Enviei há um tempo esse exemplo para poder verificar se determinado processo já está ativo no SO:
Funções WAPI no Harbour, mas se quiser pode também usar assim que funciona da mesma forma para seu caso:
Código: Selecionar todos
Function Main()
EstouRodando()
Return Nil
Function EstouRodando() // verifica se o sistema está em execução
Local cFileChek := GetEnv( "TEMP" ) + "\ATIVIDADE.SYS"
If !File( cFileChek )
Hb_MemoWrit( cFileChek, "Sistema em Execução" )
EndIf
FOpen( cFileChek, 16 ) // tenta abrir em modo exclusivo
If FError() != 0
Hb_Alert( "Sistema já Aberto nesse Computador;Por Favor, Use a Cópia que está aberta" )
Quit // fecha essa cópia do programa
EndIf
Return Nil