Copiar arquivos da rede com Serviço do Windows

Delphi

07/02/2014

Boa tarde Senhores. Sou novo aqui no forum. Por isso me desculpem se cometer alguma gaff.

Criei um serviço do Windows para fazer backups automaticamente e subir os arquivos para um servidor FTP.

Com os arquivos na maquina local, funciona normalmente, porém quando eu tento pegar os arquivos de outra maquina na rede não da certo, não gera nem uma ecessão porem também não copia. Eu testei o procedimento usando uma applicação e copia normalmente os arquivos pela rede, mas usando o serviço não.

Alguém ai poderia me dar uma ajuda para eu conseguir copiar esses arquivos na rede usando um serviço do Windos???

Desde já, fico grato...

Esse é o procedimento que estou usando:

procedure Copia(Origem, Destino: String);
var
   Parametros: Pchar;
   str: string;
begin
   Parametros := Pchar('"' + Origem + '" "' + Destino + '" /S /Y ');
   ShellExecute(0, '', 'xCopy', Parametros, '', SW_HIDE);
end;


Obs. Uso este procedimento ao invés do CopyFile, porque preciso usar coringas "*" nas cópias...
Rawgleison

Rawgleison

Curtidas 0

Respostas

Luiz

Luiz

07/02/2014

Não entendi pq você não usa o CopyFile ...

Você pode usar "*" no CopyFile.

procedure TFrmLogin.btnCopiaClick(Sender: TObject);
var
  SR: TSearchRec;
  I: integer;
  Origem, Destino: string;
  Origem_1, Destino_1: string;
begin

//camido da pasta na rede compartilhada
  Origem := '\\servidor\documentos\'; 

//destinho local no meu pc
  Destino := 'c:\tmp\';

  I := FindFirst(Origem+'*.*', faAnyFile, SR); //neste caso estou pegando todos os arquivos (*.*) da pasta com todas extensões, pode usar *.xml por exemplo.

  while I = 0 do begin

  if (SR.Attr and faDirectory) <> faDirectory then
  begin
      Origem_1 := Origem + SR.Name;
      Destino_1 := Destino + SR.Name;

      if not CopyFile(PChar(Origem_1), PChar(Destino_1), false) then //false regrava, true não copia qdo ja existe msm nome
        ShowMessage('Erro ao copiar ' + Origem_1 + ' para ' + Destino_1);
      end;
      I := FindNext(SR);
  end;
end;
GOSTEI 0
Rawgleison

Rawgleison

07/02/2014

Então, o Copyfile não copia quando é pela rede com serviço do windows, sobre o coringa que eu falei não é o "*.*' mas por exemplo, quero todo arquivo que inicie com GP_ e seja da extensão .gre ai nesse caso eu coloco "...caminho\GP_*.gre" , porem eu não queria fazer o tratamento no código, queria que foce por parâmetro passado pelo cliente. Por isso não usei Copyfile, mas de qualquer forma eu tentei esse código que vc passou, e na aplicação funciona, mas no serviço do Windows não... Mas muito obrigado pela ajuda... Ainda aguardo....

OBS. Pelo que vi ai, vc está pegando o evento OnClique de um button, logo percebe-se que é uma aplicação, o meu caso é em um serviço do Windows...
GOSTEI 0
Luiz

Luiz

07/02/2014

mas qual a origem e destino que você esta passando para a copia?

fiz um teste rápido aqui com shellexecute e funcionou na rede,

procedure TService1.ServiceCreate(Sender: TObject);
var
    parametro, txtOrigem, txtDestino : String;
    txtComando : PChar;
begin

  parametro := '*.doc';
  txtOrigem := '\\servidor\documentos\'+parametro;
  txtDestino := 'C:\tmp\';

  txtComando := Pchar('"' + txtOrigem + '" "' + txtDestino + '" /S /Y');
  ShellExecute(0, '', 'xCopy', txtComando, '', SW_SHOW);

end;



De uma olhada neste artigo:
https://www.devmedia.com.br/artigo-clube-delphi-102-services-applications/11769
GOSTEI 0
Rawgleison

Rawgleison

07/02/2014

Rapaz o problema deve ser eu então... Vou tentar mais aqui.. vlw...
GOSTEI 0
Rawgleison

Rawgleison

07/02/2014

Alguém sabe me falar como eu fecho um tópico e coloco [Resolvido] no titulo?
GOSTEI 0
Nelson Santos

Nelson Santos

07/02/2014

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
GOSTEI 0
Dimas Assuncao

Dimas Assuncao

07/02/2014

Raul boa tarde

Cara, tive o mesmo problema que você e descobri que o problema não está no DELPHI.

Entre na tela de serviços, e no seu serviço, vá em propriedades, lá vai encontrar uma tela de logon, cadastre o login de administrador para executar o serviço.

No meu caso funcionou.

Abraço
GOSTEI 0
POSTAR