Chrnos 30 Denunciar post Postado Maio 14, 2014 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
GT. 0 Denunciar post Postado Maio 16, 2014 O caminho a ser acessado pelo serviço é mapeado (ex k:\) ou o endereço completo (\\x.x.x.x)? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 16, 2014 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
GT. 0 Denunciar post Postado Maio 21, 2014 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