Página 2 de 3
Enviado: 08 Jan 2008 11:34
por ederxc
Maligno escreveu:ederxc escreveu:Lucimauro , no seu caso fica bom se o .EXE estiver no servidor , em uma rede muito extenção com muitos acessos ao servidor creio que seja mais "coerente" deixar um .EXE para cada maquina e passar uma String como parametro para os DBF´s
Se bem que esse procedimento, numa rede grande, adiciona muita dificuldade na hora de atualizar os vários .EXEs espalhados pelas extensões.
Concordo , porêm, não deixaria o sistema mais lento ??
Enviado: 08 Jan 2008 11:37
por ederxc
Em tempo...
Maligno como voce faz , o que sugere ? :|<
Enviado: 08 Jan 2008 11:48
por Pablo César
lucimauro escreveu:voce quer indentifcar o servidor certo. voce pode usar: if left(execname(),1)==[C] indentifica o servidor
Esta indicação é a mais acertada para o caso de ser apenas UM executável na rede e não como foi mencionado em outros tópicos inclusive que seria conveniente instalar todos os executáveis do sistema para cada estação. E acho que é isso ao que o Maligno se referia. Até agora eu não tive oportunidade de avaliar o gango que se obtem através de execução de executáveis nas estações. Mas se o seu caso for assim, é como o colega disse, você precisa cadastrar o nome da estação (se quiser o IP dessa máquina e o usuário caso este seja fixo) para que identifique quem é o servidor. Mas em resumida, não sei se o ganho é considerável (me refiro a instalar executáveis em cada estação). EU partiria um executável no servidor e aplicar a lógica que o colega Lucimauro indicou (eu já faço isso e funciona beleza).
Enviado: 08 Jan 2008 11:50
por alaminojunior
Confesso que também não gosto da idéia, aliás causaria lentidão apenas no inicio. Depois que o exe foi carregado na memoria do terminal, já elvis ! Já pensou a peregrinação que vc deverá fazer para atalizar o sistema de uma loja com 30 terminais. Com certeza vai esquecer um ou dois.
Mas mesmo assim, peço licença para o Janio para mostrar sua idéia. Interessante apesar de eu não usar.
Arquivo batch
@ECHO OFF
xcopy J:\Frango.exe /r /y /d C:\JanioSys
C:\JanioSys\Frango.exe
Enviado: 08 Jan 2008 14:35
por Maligno
ederxc escreveu:Maligno escreveu:ederxc escreveu:Lucimauro , no seu caso fica bom se o .EXE estiver no servidor , em uma rede muito extenção com muitos acessos ao servidor creio que seja mais "coerente" deixar um .EXE para cada maquina e passar uma String como parametro para os DBF´s
Se bem que esse procedimento, numa rede grande, adiciona muita dificuldade na hora de atualizar os vários .EXEs espalhados pelas extensões.
Concordo , porêm, não deixaria o sistema mais lento ??
Depende. Mesmo que a quantidade de estações seja muito grande, normalmente a carga do programa é feita uma vez só e nem sempre todos de uma vez. Pode até acontecer de gerar um congestionamento na rede, mas numa rede de 100Mbps não seria o fim do mundo. Mas vai de cada caso. Pra mim nunca teve problema. Mantenho um EXE só.
Enviado: 08 Jan 2008 14:38
por Maligno
ederxc escreveu:Maligno como voce faz , o que sugere ? :|<
No meu caso particular, acho mais acertado um EXE só. Quando há alteração, se o usuário na estação for fazer a carga, o programa pode ser bloqueado por ele próprio, após a verificação de uma atualização em andamente. Se a alteração chega quando o programa já está carregado, o programa também sabe que uma alteração chegou e, conforme o caso, pede pro usuário encerrar e aguardar. Semáforos. Sabe como é.
Uso um só EXE, mas conforme o que o futuro me apresentar, posso mudar para um EXE em cada estação. Em programas Windows normalmente você precisa instalar um
run-time qualquer em cada estação. Dependendo da situação (avaliada na hora), poderia ser mais interessante instalar um EXE em cada máquina. Ai, claro, o esquema de atualização precisa ser refeito pra evitar o incômodo de ter que ir de estação em estação.
Enviado: 08 Jan 2008 23:28
por lucimauro
No caso de minha resposta acima so quiz deixar uma dica de como se pode indentificar se o programa esta rodando no servidor ou nao, e no caso de se colocar um executavel e cada terminal eu ainda uso um executavel so, nos terminais crio bat´s que fazem a conexcao com o servidor.
Enviado: 09 Jan 2008 09:53
por janio
alaminojunior escreveu:Mas mesmo assim, peço licença para o Janio para mostrar sua idéia. Interessante apesar de eu não usar.
Arquivo batch
@ECHO OFF
xcopy J:\Frango.exe /r /y /d C:\JanioSys
Start C:\JanioSys\Frango.exe
Alaminojunior,
Esse esquema funciona muito bem para quem utiliza o EXE em cada estação. O .bat verifica se há no servidor um EXE com data mais atual do que aquele que está na estação. Se houver, faz a cópia automática, muitas vezes sem que o usuário perceba. Assim, vc pode ter uma rede com quantas estações quiser e TODAS estarão com o EXE mais atual.
Um outro incômodo que há para quem utiliza o EXE somente no servidor é no caso de ter que colocar alguma versão mais recente no servidor e ter que ficar pedindo para TODOS os usuário saírem do sistema para que o executável do servidor
possa ser substituído. Tem usuário que xia pra danado!
Jânio
Enviado: 09 Jan 2008 10:01
por Maligno
janio escreveu:ter que ficar pedindo para TODOS os usuário saírem do sistema para que o executável do servidor possa ser substituído.
Tem razão. Isso é muito chato mesmo. Mas note que se você usar alguns semáforos, seu programa pode tratar disso automaticamente; podendo, inclusive, "arrancar" o usuário na marra. A idéia é apenas se sentar numa estação, configurar esses semáforos com uma mensagem de alerta e um tempo limite para o infeliz sair do programa. Finado o tempo, seu sistema pode "arrancar" o sujeito, dependendo, claro, da prioridade do serviço que ele estiver realizando. E também com a ajuda de semáforos, se o usuário sair do sistema, ele não pode voltar mais, enquanto você não autorizar, também através de semáforos.
Enviado: 09 Jan 2008 10:13
por sygecom
Srs(a). eu uso apenas um EXE no servidor, e quando vou atualizar apenas renomeio o EXE que esta em USO de "SISTEMA.EXE" para "SISTEMA2.EXE" e atulizo com o novo.
Enviado: 09 Jan 2008 10:25
por janio
É... essa é realmente uma alternativa.
o SO não deixa que o EXE em uso seja SUBSTITUÍDO, mas deixa que seja RENOMEADO. Legal!
Jânio
Enviado: 09 Jan 2008 10:25
por Pablo César
sygecom escreveu:quando vou atualizar apenas renomeio o EXE que esta em USO de "SISTEMA.EXE" para "SISTEMA2.EXE" e atulizo com o novo.
Pensei que não daria para fazer isso enquanto alguém estiver executando o programa antigo. Será que isso de renomeiar durante alguém estiver executando-o na rede, não daria lagum tipo de problema ?
Sei que quando chamamos um executável, é carregado na memória (completo ou parcial) do binário daquele arquivo. Caberia saber se carrega completamente ou parcial a instrução do executável. Se for parcial, acho que tem grandes chances de ocorrer algum erro inesperado.
Enviado: 09 Jan 2008 10:33
por sygecom
Sem problema algum ! uso isso e varios clientes que tem REDE com mais de 20 micros e até hj não tive problemas...o que não pode é deletar esse arquivo renomeado....mas enganar o windows .... ISSO PODYYYYYYY.....
Enviado: 09 Jan 2008 11:31
por ederxc
sygecom escreveu:Sem problema algum ! uso isso e varios clientes que tem REDE com mais de 20 micros e até hj não tive problemas...o que não pode é deletar esse arquivo renomeado....mas enganar o windows .... ISSO PODYYYYYYY.....
Vish, o tópico ficou bem produtivo
Isso tambem póóódyyyy
Enviado: 09 Jan 2008 15:17
por MARCELOG
Bem, proveitoso o tópico foi mesmo.
Mas relativamente ao problema inicial, acho que não é difícil resolver.
Nos meus sistemas, quando usava dbf (é que tô ficando chique, agora é mysql), abria todos os arquivos necessários a utilização do sistema numa tacada só.
Então, tentava usar os arquivos em modo exclusivo.
Se conseguisse, seja no servidor ou terminal, fazia a indexação uai.
Depois, liberava os arquivos abertos em modo exclusivo e reabria os mesmos no modo compartilhado.
Se o arquivo não pudesse ser usado de forma exclusiva é porque alguém estava usando o mesmo no modo exclusivo ou compartilhado.
Então, se usado no modo exclusivo, estava sendo feita a atualização dos índices.
Caso contrário, ou seja, compartilhado, a atualização já tinha sido feita pelo primeiro usuário ou usuário ativo.
Quanto a criação do DB(F) é simples.
É só testar a sua inexistência e criar o mesmo.
MarceloG