Jump to content

Archived

This topic is now archived and is closed to further replies.

Chrnos

Acessar pasta compartilhada via serviço windows

Recommended Posts

Boa tarde,

 

Estou desenvolvendo um serviço windows no delphi 7 e me deparei com a seguinte situação: preciso ler os arquivos que estão sendo disponibilizados numa máquina da rede tendo apenas o ip e o nome da pasta compartilhada (algo como \\10.1.1.77\log). Para isso, fiz uma rotina pra validar se há arquivos a processar nesta pasta:

 

 

{ Valida se existe algum arquivo de log a ser analisado no momento que o serviço é executado }
Function ExisteArquivos(DiretorioArqIni:String):Boolean;
var SR: TSearchRec;
    dia,
    mes,
    ano : Word;
    sAux: String;
begin
  {$IFDEF DEBUG}
     GravaLog(cTipoDebug, 'Iniciando Function ExisteArquivos...');
  {$ENDIF}
  DtHoraUltimaExecucao := GetDataHoraUltimaExecucao(DiretorioArqIni);
  DecodeDate(DtHoraUltimaExecucao, ano, mes, dia);
  sAux := IfThen(dia<10,'0'+IntToStr(dia),IntToStr(dia));
  sAux := sAux + '_' + IfThen(mes<10,'0'+IntToStr(mes),IntToStr(mes));
  sAux := sAux + '_' + IntToStr(ano);

  {$IFDEF DEBUG}
     GravaLog(cTipoDebug, 'Validando existência do diretório: ' + CaminhoLog);
  {$ENDIF}

  //Valida o diretório do log
  if (Trim(CaminhoLog) <> EmptyStr)
  and DirectoryExists(CaminhoLog) then
  begin
    {$IFDEF DEBUG}
       GravaLog(cTipoDebug, 'Diretório Validado...');
    {$ENDIF}

    CaminhoLog := IncludeTrailingBackslash(CaminhoLog);

    FillChar(SR, SizeOf(TSearchRec), 0);
    try
      if FindFirst(CaminhoLog + '*_' + sAux + '.TXT', faAnyFile, SR) = 0 then
      begin
         {$IFDEF DEBUG}
         GravaLog(cTipoDebug, 'Primeiro Arquivo Encontrado: ' + SR.Name);
         {$ENDIF}
         Result := True;
      end
      else
         Result := False;
    finally
      FindClose(SR);
    end;
  end
  else
  begin
     GravaLog(cTipoErro, 'Erro durante a execução da função ExisteArquivos.... Diretório inválido: ' +
                         CaminhoLog );
     Result := False;
  end;
  {$IFDEF DEBUG}
     GravaLog(cTipoDebug, 'Encerrando Function ExisteArquivos...');
  {$ENDIF}
end;

 

Ai entra o meu problema: se eu rodar este código via um executável normal, eu consigo acessar a pasta, validar e fazer tudo o que preciso.... se eu rodar este mesmo código via serviço apontando para uma pasta local da máquina, também... agora, se eu usar no arquivo de configuração como caminho o da máquina em que será compartilhado os arquivos (\\10.1.1.77\log ou mapeado como Y: por exemplo), o código acima acusa que o diretório é inválido e não me permite acessá-lo pelo serviço windows que criei... alguém tem alguma sugestão de como contornar este problema?

Share this post


Link to post
Share on other sites

O caminho a ser acessado pelo serviço é mapeado (ex k:\) ou o endereço completo (\\x.x.x.x)?

Share this post


Link to post
Share on other sites

Tentei das duas formas: \\x.x.x.x\pasta e mapeando ela pro Y: por exemplo... acredito que seja algo relacionado a permissão do usuário na instalação do serviço (visto que, pelo que vi, ele é instalado como local), mas não sei se há um modo de contornar isso sem envolver instalar localmente o serviço na máquina onde está sendo gerado os arquivos que pretendo monitorar. Não manjo muito desta questão de gerenciamento de perfil de usuário.

 

Agradeço qualquer dica/ajuda que puder me dar.

Share this post


Link to post
Share on other sites

Primeiro você pode testar o serviço com o usuário que usa para logar na maquina. Basta ir em services.msc e no seu serviço configurar nas propriedades para logar com a sua conta.

 

Sobre as permissões não posso ajudar, mas confirmando que é questão do usuário você já pode seguir para uma outra etapa de permissões.

 

Outra coisa é que caminho mapeado parece não funcionar com serviços. De uma pesquisada sobre serviços do windows e mapeamento de rede.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.