Data e Hora do Executável

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Garoto de Programa
Usuário Nível 1
Usuário Nível 1
Mensagens: 37
Registrado em: 23 Nov 2005 14:34
Localização: Belo Horizonte/MG
Contato:

Data e Hora do Executável

Mensagem por Garoto de Programa »

Prezados,
Possuo uma aplicação que funciona da seguinte maneira:
- No servidor fica o banco de dados.
- Nas estações ficam os executáveis do sistema. Tenho um controle a parte para manter o mesmo executável nas estações.

O que eu desejo é pegar a data e a hora de modificação do executável que esta sendo utilizado. Mas como o diretório atual é o do servidor, eu não consigo pegar a data do executável local. A chamada do executável pelo Windows ja passa a pasta de trabalho do servidor, então não tem como pegar a data antes de mudar para a pasta de trabalho pois já inicia com a pasta atual no servidor.

Fazendo referência ao Delphi eu tenho a função Application.Exename que me retorna a path completa do executável, desta forma tenho uma referência do executável que estou utilizando, mas não conheço ainda uma função semelhante no xHarbour.

Bom agradeço o seu interesse por ler este post, e caso eu descubra como fazê-lo estarei postando aqui a resposta.
infosys2
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 10 Out 2008 06:36
Localização: Sao Pulo
Contato:

Re: Data e Hora do Executável

Mensagem por infosys2 »

cExeName:=UPPER(EXENAME()) // Pegar o nome completo do executavel

Esta funcao pega o nome completo do executavel...
Clipper, xHarbour, gtwvw, wvwtools, fivewin
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Data e Hora do Executável

Mensagem por sygecom »

ou

Código: Selecionar todos

***********VEREFICA O NOME DO EXECUTAVEL E O CAMINHO DO MESMO*******************
*NomeExecutavel()    // verefica o nome
*NomeExecutavel(.t.) // verefica o caminho
********************************************************************************
Function NomeExecutavel(lPath)
LOCAL nPos, cRet
If Empty(lpath)
   nPos:= RAT("\", hb_argv(0))
   cRet:= substr(hb_argv(0), nPos+1)
else
   cRet:= hb_argv(0)
endif
Return cRet
Exemplo pegando data e hora do Exe:

alert("Data da Ultima Atualização.: "+Data_Hora_ARQ(NomeExecutavel()))

Código: Selecionar todos

#include "Directry.ch"
****************************
Function Data_Hora_ARQ(vArq)
****************************
SET CENTURY ON
SET DATE BRITISH
SET EPOCH TO 2000

aDir  := Directory( vArq )
aRet  := Transform(DtoC(aDir[1,3]),"@d")
aRet2 := aDir[1,4]
Return( aRet + " - " + aRet2 )

Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
chrissoares
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 23 Dez 2009 14:35
Localização: Belo Horizonte/MG
Contato:

Data e Hora do Executável

Mensagem por chrissoares »

Bem,

Quando estava procurando por esta solução, não encontrei em nenhum local, mas agora que estava pesquisando sobre gerar arquivos PDF, encontrei a solução para este problema. Por este motivo resolvi compartilhar com os novatos como eu.

No xHarbour existem duas funções chamadas FileDate(cFileName) e FileTime(<cFileName>, <nAttributes>) que retornam a Data e a Hora de modificação de um arquivo qualquer. Os parâmetros destas funções são opcionais, sendo que elas vão utilizar o ultimo arquivo encontrado pela função FileSeek(). Mas para este caso deste tópico seria necessário passar o Nome do Executável como Parâmetro.

Um exemplo Simples para o seu uso seria.

Código: Selecionar todos

procedure main()
  Alert(FileDate(ExeName())) // Atenção pois o retorno da função FileDate é uma data.
  Alert(FileTime(ExeName())) // A função FileTime retorna uma String.
Return nil
No código usei a função ExeName(), como foi sugerido pelo colega infosys2, ela vai retornar o nome do executável da sua aplicação, é útil quando alguém trocar o nome dele, assim não vai gerar um erro de arquivo não encontrado.

Abraços a todos os colaboradores e que Deus continue abençoando cada um de vocês.

Espero
Christiano R. Soares
Analista Desenvolvedor
www.bhdados.com.br

'Tudo o que fizerem, façam de todo o coração, como para o Senhor, e não para os homens, sabendo que receberão do Senhor a recompensa da herança. É a Cristo, o Senhor, que vocês estão servindo. '
Colossenses 3:23-24
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Data e Hora do Executável

Mensagem por Pablo César »

Oi Christiano, realmente são úteis as dicas que você deixou. No entanto a questão fundamental do problema do "Garoto de Programa" é que não consegue pegar a data e hora do executável local, da estação. Veja:
Garoto de Programa escreveu:não consigo pegar a data do executável local
Não sei se ele já resolveu o problema. Mas sendo assim, eu queria saber se existe algum arquivo .BAT que chama o sistema. E se no arquivo .BAT posiciona-se na pasta local na estação. Daí seria bem fácil dar a solução. Pois daí então caberia colocar a unidade C: para indicar que refere-se ao exe local. Exemplo: FileDate("C:"+Substr(ExeName(), (RAT("\",ExeName()))+1)) (aqui remove qualquer caminho ou path).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Data e Hora do Executável

Mensagem por asimoes »

Para gravar data e hora de criação do executável eu faço assim:

na bat exemplo:

hbmk2 cadastra.hbp -rebuild -bldhead=compdatetime.ch

Eu criei um header chamado ambienteaplic.ch que é incluído no PRG principal

Assim, qualquer lib do meu sistema consegue pegar os valores deste include.

AmbienteAplic.ch

Código: Selecionar todos

FUNCTION CompDateTime(aCompDateTime)
   #include "compdatetime.ch"
   aCompDateTime:={ DTOC(STOD(_HBMK_BUILD_DATE_)), _HBMK_BUILD_TIME_}
RETURN aCompDateTime
Como?

Código: Selecionar todos

aCompDateTime:={}
Eval({||CompDateTime(@aCompDateTime)})
cDataExe  := aCompDateTime[1]+" "+aCompDateTime[2]
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder