EXECUTAVEL
Ola pessoal, entao meu problema é o seguinte, eu tenho uns 30 computadores em rede e eles usam o programa q eu fiz, entao cada vez q eu atualizo eu tenho q fazer outro executavel e por no servidor, só q ele nao me deixa fazer isso a nao ser q todos estejam com o programa fechado.
Tem algum jeito de burlar isso???, pq é um saco fica esperando todo mundo fechar pra eu poder substituir
agradeço a atençao!
Tem algum jeito de burlar isso???, pq é um saco fica esperando todo mundo fechar pra eu poder substituir
agradeço a atençao!
é o seguinte,
Por um lado, você deve reconhecer que não é um bom negócio substituir um arquivo que está sendo executado no momento...
Por outro lado, se não me engano, o comando Kill(Arquivo) deleta o arquivo ainda que esteja aberto. Portanto, se eu não estiver equivocado, você pode fazer o que pretende...
Por um lado, você deve reconhecer que não é um bom negócio substituir um arquivo que está sendo executado no momento...
Por outro lado, se não me engano, o comando Kill(Arquivo) deleta o arquivo ainda que esteja aberto. Portanto, se eu não estiver equivocado, você pode fazer o que pretende...
Acabei de testar aqui.
Para documentos de texto, coisinhas pequenas, etc, ele realmente deleta o arquivo sem misericórdia...[S28]
Mas infelizmente (ou felizmente) ele não faz o mesmo com aplicativos...[S62]
Para documentos de texto, coisinhas pequenas, etc, ele realmente deleta o arquivo sem misericórdia...[S28]
Mas infelizmente (ou felizmente) ele não faz o mesmo com aplicativos...[S62]
Eu tive este mesmo problema em uma empresa e lá eu costumava usar o commando Kill e quando este falhava eu manda uma mensagem para o grupo atravez de winpop(up) pedindo aos usuários que fechem o sistema...
Zani
Zani
executo esse comando kill aonde?
no windows??
no windows??
VB
Kill nomedoarquivo
Zani.
Kill nomedoarquivo
Zani.
nao tem outro jeito nao??
pelo windows mesmo, tipo desabilita alguma opçao pra doer fazer issoo???
pelo windows mesmo, tipo desabilita alguma opçao pra doer fazer issoo???
Bem eu não arriscaria dar um Kill , pois pode ser exatamente na hora de uma transação com o banco o que pode danificar.
Tenho também esse problema, e fiz um outro programa que seria de manutenção onde faz a compactação do banco Access ( o que não pode ter ninguém conectado) e tem uma opção para atualização do exe.
Esse programa é usado pelo pessoal do CPD de madrugada onde não tem ninguém usando o sistema. O Programa lista as tarefas a serem realizadas e o operador bastar acionar e pronto. No caso do EXE tem uma pasta propria onde coloco o arquivo novo, o programa verifica se tem na pasta a existencia do arquivo se tiver entra na lista de tarefas.
Bem tem um outro modo que seria a propria aplicacão verificar a existencia desse arquivo. Mas é um pouco mais complexa. Quando o usuário desse o login no sistema o programa checa se existe atualização. Então o programa A ( usado) aciona um outro programa ( que seria o de atualização), apos acionar o programa de atualização o programa A é encerrado. (END)
Então o programa de atualização faz a troca dos arquivos. Mas essa solução é para quando o EXE esta na máquina do cliente.
Agora quando tenho que resolver pipinos no banco Access e preciso na hora tirar a galera do ar, eu faço uma copia do banco ( por segurança) e simplesmente retiro o compartilhamento da rede. Pronto todo mundo cai na hora.Faço o que tenho que fazer e depois retorno o compartilhamento. Isso é força bruta, mas paciência.
Tenho também esse problema, e fiz um outro programa que seria de manutenção onde faz a compactação do banco Access ( o que não pode ter ninguém conectado) e tem uma opção para atualização do exe.
Esse programa é usado pelo pessoal do CPD de madrugada onde não tem ninguém usando o sistema. O Programa lista as tarefas a serem realizadas e o operador bastar acionar e pronto. No caso do EXE tem uma pasta propria onde coloco o arquivo novo, o programa verifica se tem na pasta a existencia do arquivo se tiver entra na lista de tarefas.
Bem tem um outro modo que seria a propria aplicacão verificar a existencia desse arquivo. Mas é um pouco mais complexa. Quando o usuário desse o login no sistema o programa checa se existe atualização. Então o programa A ( usado) aciona um outro programa ( que seria o de atualização), apos acionar o programa de atualização o programa A é encerrado. (END)
Então o programa de atualização faz a troca dos arquivos. Mas essa solução é para quando o EXE esta na máquina do cliente.
Agora quando tenho que resolver pipinos no banco Access e preciso na hora tirar a galera do ar, eu faço uma copia do banco ( por segurança) e simplesmente retiro o compartilhamento da rede. Pronto todo mundo cai na hora.Faço o que tenho que fazer e depois retorno o compartilhamento. Isso é força bruta, mas paciência.
Eu tenho uma sugestão:
Crie uma função em seu programa que verifica se existe um arquivo de atualização (tipo, uma pasta no servidor chamada Atualiza).
Voce coloca nesta função:
if dir("endereçodoservidor\atualiza\seuprograma.exe") <> "" then
msgbox "O Sistema será fechado para atualização.", vbCritical, "Atualização do Sistema"
end
endif
Coloca a chamada desta função na abertura de cada form, assim, é só colocar o arquivo no Atualiza, que ao fechar um form e abrir outro o usuário recebe esta mensagem e fecha o programa. Coloque também no Load do programa, assim o cara não tenta abrir de novo.
Feito isto, em um momento todos os usuários serão obrigados a fechar o programa. Crie um Supervisor.exe, que executa apenas o seguinte:
Verifica se na pasta atualiza tem arquivo, se tiver tenta apagar do raiz (do seu sistema) e copiar o novo arquivo, e apagar o arquivo do atualiza. Caso não consiga apagar porque tá em uso coloque um On error resume next.
Eu fiz assim em um projeto e funciona muito bem. Não precisa pedir ninguém para ficar avisando para fechar o sistema, e quando está atualizado, é só o cara executar.
Parece complicado, mas pense bem, é muito simples.
Crie uma função em seu programa que verifica se existe um arquivo de atualização (tipo, uma pasta no servidor chamada Atualiza).
Voce coloca nesta função:
if dir("endereçodoservidor\atualiza\seuprograma.exe") <> "" then
msgbox "O Sistema será fechado para atualização.", vbCritical, "Atualização do Sistema"
end
endif
Coloca a chamada desta função na abertura de cada form, assim, é só colocar o arquivo no Atualiza, que ao fechar um form e abrir outro o usuário recebe esta mensagem e fecha o programa. Coloque também no Load do programa, assim o cara não tenta abrir de novo.
Feito isto, em um momento todos os usuários serão obrigados a fechar o programa. Crie um Supervisor.exe, que executa apenas o seguinte:
Verifica se na pasta atualiza tem arquivo, se tiver tenta apagar do raiz (do seu sistema) e copiar o novo arquivo, e apagar o arquivo do atualiza. Caso não consiga apagar porque tá em uso coloque um On error resume next.
Eu fiz assim em um projeto e funciona muito bem. Não precisa pedir ninguém para ficar avisando para fechar o sistema, e quando está atualizado, é só o cara executar.
Parece complicado, mas pense bem, é muito simples.
Tópico encerrado , respostas não são mais permitidas