Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.