Fórum Copiar arquivos da rede com Serviço do Windows #469187
07/02/2014
0
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
Curtir tópico
+ 0Posts
07/02/2014
Luiz
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
07/02/2014
Rawgleison
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
07/02/2014
Luiz
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
07/02/2014
Rawgleison
Gostei + 0
25/03/2014
Rawgleison
Gostei + 0
27/05/2014
Nelson Santos
www.3dsistemas.com.br
Gostei + 0
01/08/2017
Dimas Assuncao
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
Clique aqui para fazer login e interagir na Comunidade :)