Atualiza arquivos de uma pasta
Bom dia.
Pessoal sou novo em programação..bem novo...gostaria de saber se alguém pode me ajuda.
Tenho uma pasta em um servidor onde existe arquivos atualizados do sistema, preciso que esses arquivos vão para uma pasta no c:\ das estações, mas preciso que ele valide se os arquivos das estações tenham a dada menor que os arquivos que estão no servidor, com isso preciso que ele exclua os arquivos .exe da estação e copie os arquivos do servidor.
Meu cenário.
Servidor.
Pasta com Subpastas, Dll e com arquivos .exe,
Estação
C:\ Pasta com Subpastas, Dll e com arquivos .exe, porém possui arquivos .exe com nomes diferentes.
Obrigado
Pessoal sou novo em programação..bem novo...gostaria de saber se alguém pode me ajuda.
Tenho uma pasta em um servidor onde existe arquivos atualizados do sistema, preciso que esses arquivos vão para uma pasta no c:\ das estações, mas preciso que ele valide se os arquivos das estações tenham a dada menor que os arquivos que estão no servidor, com isso preciso que ele exclua os arquivos .exe da estação e copie os arquivos do servidor.
Meu cenário.
Servidor.
Pasta com Subpastas, Dll e com arquivos .exe,
Estação
C:\ Pasta com Subpastas, Dll e com arquivos .exe, porém possui arquivos .exe com nomes diferentes.
Obrigado
Ricardo
Curtidas 0
Respostas
Marcos P
13/02/2015
Olá,
Você vai precisar de um utilitário de cópia desses arquivos ou então construir um batch que rode nas estações e execute esses passos que você definiu.
Procure na web sobre "utilitário sincronização de arquivos em rede".
Você vai precisar de um utilitário de cópia desses arquivos ou então construir um batch que rode nas estações e execute esses passos que você definiu.
Procure na web sobre "utilitário sincronização de arquivos em rede".
GOSTEI 0
Emerson Nascimento
13/02/2015
faça o seguinte: crie um exe - vamos chamá-lo de escravo - somente para chamar o seu exe principal.
esse exe escravo deve consultar a pasta de atualização e, caso haja algum arquivo mais recente, copiá-lo para a pasta onde ele mesmo, o escravo, estiver sendo executado. após efetuar a cópia ele chama o exe principal.
deixe-me tentar ilustrar melhor.
no servidor você tem a árvore:
d:\sistema\server
d:\sistema\dados
d:\sistema\atualzacao
nesta pasta atualização você coloca todos os seus arquivos que devem ser atualizados (precisam ter o mesmo nome do arquivo da estação cliente).
nas máquinas cliente:
c:\sistema
onde você teria o arquivo SISTEMA.EXE - chamador, que teoricamente nunca seria atualizado - e o arquivo S1EXEC.EXE, que é o arquivo principal da sua aplicação, juntamente com todos os arquivos auxiliares: pacotes, dlls, arquivos de configuração, etc.
o seu atalho deve apontar para o SISTEMA.EXE. dentro desse programa está o código de verificação da necessidade de atialização. Caso haja necessidade, ele atualiza o S1EXE.EXE e qualquer outro arquivo que esteja desatualizado. Após todas as tarefas, ele chama o S1EXEC.EXE - que pode ou não ter sido atualizado.
expliquei ou compliquei?
esse exe escravo deve consultar a pasta de atualização e, caso haja algum arquivo mais recente, copiá-lo para a pasta onde ele mesmo, o escravo, estiver sendo executado. após efetuar a cópia ele chama o exe principal.
deixe-me tentar ilustrar melhor.
no servidor você tem a árvore:
d:\sistema\server
d:\sistema\dados
d:\sistema\atualzacao
nesta pasta atualização você coloca todos os seus arquivos que devem ser atualizados (precisam ter o mesmo nome do arquivo da estação cliente).
nas máquinas cliente:
c:\sistema
onde você teria o arquivo SISTEMA.EXE - chamador, que teoricamente nunca seria atualizado - e o arquivo S1EXEC.EXE, que é o arquivo principal da sua aplicação, juntamente com todos os arquivos auxiliares: pacotes, dlls, arquivos de configuração, etc.
o seu atalho deve apontar para o SISTEMA.EXE. dentro desse programa está o código de verificação da necessidade de atialização. Caso haja necessidade, ele atualiza o S1EXE.EXE e qualquer outro arquivo que esteja desatualizado. Após todas as tarefas, ele chama o S1EXEC.EXE - que pode ou não ter sido atualizado.
expliquei ou compliquei?
GOSTEI 0
Ricardo
13/02/2015
.bat está fora de questão, pois esse eu tenho, e tem usuário que editam...ai complica td.
Isso mesmo Emerson.
Segue o código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
NomeDoLog, UserName, Data, Result, ResultUser: string;
Arquivo: TextFile;
Buffer: Array[0..255] of char;
Size, UserNameLen: DWord;
begin
Application.ShowMainForm := False;
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq1.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq2.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq3.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq4.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq5.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq6.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq7.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arc8.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq9.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq10.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c md sistema'),SW_HIDE);
WinExec(PChar('cmd.exe /c del c:\sistema\*.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c xcopy \\server\Usuarios\Utilitarios\sistema\*.* c:\sistema\*.* /e /c /y /d /z'),SW_HIDE);
//pegando o host
Size := 256;
if GetComputerName (Buffer,Size) then
Result := Buffer
else
Result := '';
//pegando o usuario
UserNameLen := 255;
SetLength (UserName, UserNameLen);
if GetUserName (PChar(UserName), UserNameLen) Then
ResultUser := Copy (UserName,1,UserNameLen - 1)
else
ResultUser := 'Desconhecido';
//pegando a data
Data := FormatDateTime('dd/mm/YYYY hh:nn',now);
//gravando no arquivo
NomeDoLog := '\\sever\Usuarios\Utilitarios\atusistema\log_atualizacao.txt';
AssignFile(Arquivo, NomeDoLog);
if FileExists(NomeDoLog) then
Append(Arquivo)
else
ReWrite(Arquivo);
try
WriteLn(Arquivo, Data+';'+Result+';'+ResultUser);
finally
CloseFile(Arquivo)
end;
Application.Terminate;
end;
end.
Meu problema está nessa linha:
WinExec(PChar('cmd.exe /c del c:\sistema\*.exe'),SW_HIDE);
Cada vez que ele executa, ele exclui os arquivos, preciso que cada vez que forexecutado(ao ligar o computador), ele verefique se a dada dos arquivos no servidor são diferentes da pasta \sistema que esta no c:\ da estação.
Isso mesmo Emerson.
Segue o código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
NomeDoLog, UserName, Data, Result, ResultUser: string;
Arquivo: TextFile;
Buffer: Array[0..255] of char;
Size, UserNameLen: DWord;
begin
Application.ShowMainForm := False;
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq1.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq2.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq3.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq4.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq5.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq6.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq7.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arc8.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq9.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c taskkill /f /t /im arq10.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c md sistema'),SW_HIDE);
WinExec(PChar('cmd.exe /c del c:\sistema\*.exe'),SW_HIDE);
WinExec(PChar('cmd.exe /c xcopy \\server\Usuarios\Utilitarios\sistema\*.* c:\sistema\*.* /e /c /y /d /z'),SW_HIDE);
//pegando o host
Size := 256;
if GetComputerName (Buffer,Size) then
Result := Buffer
else
Result := '';
//pegando o usuario
UserNameLen := 255;
SetLength (UserName, UserNameLen);
if GetUserName (PChar(UserName), UserNameLen) Then
ResultUser := Copy (UserName,1,UserNameLen - 1)
else
ResultUser := 'Desconhecido';
//pegando a data
Data := FormatDateTime('dd/mm/YYYY hh:nn',now);
//gravando no arquivo
NomeDoLog := '\\sever\Usuarios\Utilitarios\atusistema\log_atualizacao.txt';
AssignFile(Arquivo, NomeDoLog);
if FileExists(NomeDoLog) then
Append(Arquivo)
else
ReWrite(Arquivo);
try
WriteLn(Arquivo, Data+';'+Result+';'+ResultUser);
finally
CloseFile(Arquivo)
end;
Application.Terminate;
end;
end.
Meu problema está nessa linha:
WinExec(PChar('cmd.exe /c del c:\sistema\*.exe'),SW_HIDE);
Cada vez que ele executa, ele exclui os arquivos, preciso que cada vez que forexecutado(ao ligar o computador), ele verefique se a dada dos arquivos no servidor são diferentes da pasta \sistema que esta no c:\ da estação.
GOSTEI 0
Emerson Nascimento
13/02/2015
baixe o exemplo do link.
note que ele faz a comparação de cada arquivo da pasta \Atualizacao com aqueles da pasta onde está sendo executado o programa (o link deve estar apontando para o programa SplashScreen.exe).
caso haja algum arquivo mais recente, seja .exe, .lib, .dll, .ini, etc., o sistema faz a atualização e depois abre o programa principal (SistPrinc.exe).
baixe aqui.
note que ele faz a comparação de cada arquivo da pasta \Atualizacao com aqueles da pasta onde está sendo executado o programa (o link deve estar apontando para o programa SplashScreen.exe).
caso haja algum arquivo mais recente, seja .exe, .lib, .dll, .ini, etc., o sistema faz a atualização e depois abre o programa principal (SistPrinc.exe).
baixe aqui.
GOSTEI 0
Ricardo
13/02/2015
Vou dar uma olhada, mas sou bem novo em programação, quase não entendo nada....
GOSTEI 0