Já sei o que pode estar acontecendo. Qual é a versão do seu HMG ? Acredito que você está usando a 3.0.35, não é ? Esta versão apenas indico só para migração, mas a versão mais atual vem com mais recursos do HMG e melhorias no de versão do Harbour mais recente.
Realmente era a 3.0.35. Baixei a 3.0.45 e a hb_eol() realmente funcionou. Mas a função que vc havia postado por último não. Estranhamente, ela não dá nenhum erro, mas também não executa. Só faz um som de alerta, semelhante ao de erro, mas não dá nada.
Quê bom que está sendo útil pra você e espero que sirva para outros no futuro. Mas gostaria de pedir-lhe um favor em troca. Se você pudesse suprimir (tanto para minha pessoa como para os outros) esse seu tratamento de "meu caro", eu agradecerei muito. Sei que você não o faz com o intuito de menosprezar alguém, mas é que soa meio estranho (pelo menos para mim, desculpe eu ser chato).
Desculpe, cara. "Meu caro" é uma expressão muito comum na minha profissão (Direito), sempre com conotação muito respeitosa, nunca com o intuito de menosprezar. De toda forma, desculpe, não a usarei mais.
Não creio, mas considerando que você terá um alto consumo de requisições pelos "RUNs" que você está utilizando, acho melhor economizar, outra também porque é para você ir se acostumando. É uma boa prática.
Com certeza. Farei isto.
Você quer dizer comandos, não funções.
Realmente, comandos. Fiz confusão.
Bom quanto isso, já dei a solução com a função MyRun.
Não sei porque, mas esta função ainda não está funcionando. Ainda está abrindo a tela preta.
1. Antes da instalação você precisa baixar o arquivo Usuario.dbf do site ftp.inaciocarvalho.com.br/instala ?
Sim, o arquivo usuario.dbf é a base de todo o resto da instalação, inclusive para conferir a senha digitada.
2. Faltou a função PegaFTP. Você poderia postá-la ?
Esta é uma função que fiz com base na ajuda de alguém do grupo. Aí vai ela:
Código: Selecionar todos
Function pegaftp(arqvpeg,pasta)
ftpproto ="ftp://" //posthilit">ftp://"
ftpserver = "ftp.inaciocarvalho.com.br" //posthilit">ftp.servidor.com.br" endereço de ="posthilit">FTP</span> do site
ftpuser = "promotor" //Usuário da conta ="posthilit">FTP</span>
ftppass = snhftp //Senha da conta ="posthilit">FTP</span>
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oCred:= tIPCredentials()
oUrl:= turl():new(curl)
oFtp:= tipclientftp():NEW(oUrl,.F.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
IF oFTP:Open()
oFTP:Cwd(pasta) // informe o diretorio (="posthilit">no</span> site) onde está o arquivo EXE que voce vai copiar
IF !empty(clista:=oFTP:List())
oFtp:DownLoadFile(arqvpeg) //informe o nome do arquivo que você quer baixar
else
return .f.
ENDIF
oFTP:Close()
else
return .f.
ENDIF
Return .t.
3. Para quê serve a função verarqv ? Você poderia postá-la ?
É uma função para verificar a integridade do arquivo baixado. Aí vai ela:
Código: Selecionar todos
function verarqv(arqv)
if !file(arqv) .or. filesize(arqv)=0 .or. ("DBF"$upper(arqv) .and. usebase(arqv)=.f.)
@ maxrow(),1 say "Conferindo arquivo "+alltrim(arqv)+"; aguarde"
pegaftp(arqv,"www.inaciocarvalho.com.br/instala")
pegaftp(upper(arqv),"www.inaciocarvalho.com.br/instala")
pegaftp(substr(upper(arqv),1,1)+substr(arqv,2),"www.inaciocarvalho.com.br/instala")
if !file(arqv) .or. filesize(arqv)=0 .or. ("DBF"$upper(arqv) .and. usebase(arqv)=.f.)
__run("pega ftp.inaciocarvalho.com.br promotor " + snhftp + " www.inaciocarvalho.com.br/instala . "+arqv)
__run("pega ftp.inaciocarvalho.com.br promotor " + snhftp + " www.inaciocarvalho.com.br/instala . "+upper(arqv))
__run("pega ftp.inaciocarvalho.com.br promotor " + snhftp + " www.inaciocarvalho.com.br/instala . "+substr(upper(arqv),1,1)+substr(arqv,2))
if !file(arqv) .or. filesize(arqv)=0 .or. ("DBF"$upper(arqv) .and. usebase(arqv)=.f.)
mandmail2("pega.log","Não tem o arquivo "+arqv+" ou arquivo com tamanho 0","")
endif
endif
@ maxrow(),1 clear to maxrow(),maxcol()
endif
return
4. Presumo que terão que baixar os arquivos: tar2p.exe e tar2p.bat, estou certo ? Se sim, estranho por terem o mesmo nome. É assim mesmo ?
Na verdade o tar2p.bat não é mais necessário, esqueci de tirar.
5. Você parece utilizar o Pega.bat para ser executado. Você poderia postar o conteúdo desse arquivo ?
Aí vai:
Código: Selecionar todos
@echo off
if [%1] == [] goto fim
:: Parametros
::=============================
:: 1 - host ftp
:: 2 - usuario
:: 3 - senha
:: 4 - pasta remota
:: 5 - pasta local
:: 6 - arquivo a ser baixado
set allusersprofile=
set appdata=
set commonprogramfiles=
set homepath=
set number_of_processors=
set os2libpath=
set processor_architecture=
set processor_identifier=
set processor_level=
set processor_revision=
set programfiles=
set userprofile=
set userdomain=
:: Cria o arquivo de script
::=============================
echo open %1 > pega.ftp
echo user %2 %3 >> pega.ftp
echo binary >> pega.ftp
echo prompt >> pega.ftp
echo cd %4 >> pega.ftp
echo lcd %5 >> pega.ftp
echo get %6 >> pega.ftp
echo bye >> pega.ftp
:: Executa o script no FTP
::=============================
set l1=--------------------
set l2=********************
echo %l2%%l2%%l2%%l2%>> pega.log
echo.|date >> pega.log
echo.|time >> pega.log
echo %l1%%l1%%l1%%l1%>> pega.log
ftp -s:pega.ftp -n >> pega.log
echo %l1%%l1%%l1%%l1%>> pega.log
echo. >> pega.log
echo. >> pega.log
set l1=
set l2=
:: Exclui o arquivo de script
::=============================
del pega.ftp
:fim
6. Parece que precisa baixar dois arquivos com o mesmo nome, porém um é composto pelo nome tudo em maiúsculas. Sendo composto desta forma: ativ+".dbf" e upper(ativ)+".dbf", você confirma ? Por quê disso ? O get do ftp faz download de qualquer forma ou estou errado ?
Não, na verdade eu faço a tentativa de baixar de várias formas, porque nunca sei como está o arquivo no ftp. Pode estar todo em minúsculas, pode estar com a inicial maiúscula ou pode estar todo em maiúsculas.
7. Sei que a variável us provém do campo usuario. Poderia me dizer qual é o tamanho e o tipo do campo ?
É um caracter de um só dígito, uma letra apenas.
Nossa tive que copiar linha a linha (uma 140 linhas) porque o sistema aqui do fórum deixou incompleto no botão "Ver codigo". Isso já foi reportado ao Sr. Toledo, mas parece que ainda não foi resolvido. E tenho várias dúvidas quanto o final da sua função deste seu código: viewtopic.php?f=4&t=13547#p78650 (linha de 253 a 392). No entanto, deixaremos para semana que vem isso.
Desculpe, mas não consegui entender a sua pergunta aqui.
Sim vamos criar o arquivo BAT e testar pra ver se ele irá apresentar a tela preta. Senão iremos por outro caminho. Mas primeiro temos que acertar toda essa rotina de usuário e esse replace em dbf. Tem muita coisa que pode ser otimizada.
Com certeza. Muito obrigado.
Posto a função como está neste momento. Ainda não fiz todos os acertos que vc mencionou por falta de tempo, mas vou fazer:
Código: Selecionar todos
#include <hmg.ch>
Function Main
us="T"
nmus="Twin"
vers=""
snh="1"
snhftp=""
DEFINE WINDOW Win_1 AT 281 , 132 WIDTH 580 HEIGHT 266 ;
TITLE "Instalação do programa de tarefas" ICON NIL MAIN ;
BACKCOLOR {0,128,255}
DEFINE LABEL Label_0
ROW 30
COL 20
WIDTH 530
HEIGHT 20
VALUE "Aguarde a instalação, isso pode levar alguns minutos..."
VISIBLE .F.
FONTBOLD .T.
FONTNAME "Times"
FONTSIZE 12
BACKCOLOR {0,128,255}
FONTCOLOR {255,255,0}
CENTERALIGN .T.
END LABEL
DEFINE LABEL Label_1
ROW 30
COL 20
WIDTH 530
HEIGHT 20
VALUE "Instalação efetuada com sucesso"
VISIBLE .F.
FONTBOLD .T.
FONTNAME "Times"
FONTSIZE 12
BACKCOLOR {0,128,255}
FONTCOLOR {255,255,0}
CENTERALIGN .T.
END LABEL
DEFINE LABEL Label_2
ROW 90
COL 140
WIDTH 220
HEIGHT 20
VALUE "Senha fornecida para instalação:"
VISIBLE .T.
FONTBOLD .T.
FONTNAME "Times"
FONTSIZE 12
BACKCOLOR {0,128,255}
FONTCOLOR {0,0,0}
CENTERALIGN .T.
END LABEL
DEFINE TEXTBOX Text_1
ROW 90
COL 270
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP "Informe a senha fornecida para instalação"
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Ver_Senha(This.Value)
HELPID Nil
TABSTOP .T.
VISIBLE .T.
READONLY .F.
RIGHTALIGN .F.
PASSWORD .T.
BACKCOLOR {0,128,255}
FONTCOLOR Nil
INPUTMASK Nil
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE BUTTON Button_1
ROW 180
COL 140
WIDTH 100
HEIGHT 28
ACTION Ver_Senha(GetProperty("Win_1","Text_1","Value"))
CAPTION "Login"
FONTNAME "Times"
FONTSIZE 12
TOOLTIP "Digite a senha e clique aqui para continuar"
END BUTTON
DEFINE BUTTON Button_2
ROW 180
COL 340
WIDTH 100
HEIGHT 28
ACTION Thiswindow.Release()
CAPTION "Sair"
FONTNAME "Times"
FONTSIZE 12
TOOLTIP "Clique aqui para sair do programa de instalação"
END BUTTON
END WINDOW
Win_1.Center
Win_1.Activate
Return Nil
Function ativ_Aguarde()
SetProperty("Win_1","Label_2","Visible",.F.)
SetProperty("Win_1","Label_0","Visible",.T.)
SetProperty("Win_1","Text_1","Visible",.F.)
SetProperty("Win_1","Button_1","Visible",.F.)
SetProperty("Win_1","Button_2","Visible",.F.)
Return Nil
function desativ_aguarde()
SetProperty("Win_1","Label_0","Visible",.F.)
SetProperty("Win_1","Label_1","Visible",.T.)
SetProperty("Win_1","Button_2","Visible",.T.)
return nil
Function inst2()
ativ_aguarde()
diskchange("c")
dirmake("\trefas")
dirchange("\trefas")
dirmake("temp")
erase \tarefas\instala.ftp
erase \tarefas\instala.log
myrun("netsh firewall set opmode mode = disable >fir1.txt")
* !netsh advfirewall set currentprofile state off >fir2.txt
*:: Parametros
*::=============================
*:: 1 - host ftp
*:: 2 - usuario
*:: 3 - senha
*:: 4 - pasta remota
*:: 5 - pasta local
*:: 6 - arquivo a ser baixado
!set allusersprofile=
!set appdata=
!set commonprogramfiles=
!set homepath=
!set number_of_processors=
!set os2libpath=
!set processor_architecture=
!set processor_identifier=
!set processor_level=
!set processor_revision=
!set programfiles=
!set userprofile=
!set userdomain=
*:: Cria o arquivo de script
*::=============================
!echo open ftp.inaciocarvalho.com.br > instala.ftp
!echo user promotor mppr95 >> instala.ftp
!echo binary >> instala.ftp
!echo prompt >> instala.ftp
!echo cd www.inaciocarvalho.com.br/instala >> instala.ftp
!echo lcd . >> instala.ftp
!echo get TAREFAS.EXE >> instala.ftp
!echo get AGTEL.DBF >> instala.ftp
!echo get ARQBX.DBF >> instala.ftp
!echo get ARQUIVO.DBF >> instala.ftp
!echo get BASE.DBF >> instala.ftp
!echo get BIBLIA.DBF >> instala.ftp
!echo get buttonx.exe >> instala.ftp
!echo get CONSTEX.DBF >> instala.ftp
!echo get CONSTEX.DBT >> instala.ftp
!echo get CONSULTA.DBF >> instala.ftp
!echo get envia.bat >> instala.ftp
!echo get ERRO.DBF >> instala.ftp
!echo get lista.bat >> instala.ftp
!echo get pega.bat >> instala.ftp
!echo get LISTA.DBF >> instala.ftp
!echo get LISTREC.DBF >> instala.ftp
!echo get rar.exe >> instala.ftp
!echo get recebe.bat >> instala.ftp
!echo get RECEBID.DBF >> instala.ftp
!echo get tar-comp.bat >> instala.ftp
!echo get TARVELHO.EXE >> instala.ftp
!echo get usuario.dbf >> instala.ftp
!echo get criadesk.exe >> instala.ftp
!echo get manderr.exe >> instala.ftp
!echo get Minimize.exe >> instala.ftp
!echo get WAPI.EXE >> instala.ftp
!echo get WAPI.LIB >> instala.ftp
!echo get FERIADO.DBF >> instala.ftp
!echo get tar2p.exe >> instala.ftp
!echo get tar2p.rar >> instala.ftp
!echo get smtpsend.exe >> instala.ftp
!echo get icone.vbs >> instala.ftp
!echo bye >> instala.ftp
*:: Executa o script no FTP
*::=============================
!set l1=--------------------
!set l2=********************
!echo %l2%%l2%%l2%%l2%>> instala.log
!echo.|date >> instala.log
!echo.|time >> instala.log
!echo %l1%%l1%%l1%%l1%>> instala.log
!ftp -s:instala.ftp -n >> instala.log
!echo %l1%%l1%%l1%%l1%>> instala.log
!echo. >> instala.log
!echo. >> instala.log
!set l1=
!set l2=
*:: Exclui o arquivo de script
*::=============================
erase instala.ftp
verarqv("pega.bat")
verarqv("tarefas.exe")
verarqv("arqbx.dbf")
verarqv("consulta.dbf")
verarqv("arquivo.dbf")
verarqv("erro.dbf")
verarqv("lista.bat")
verarqv("lista.dbf")
verarqv("listrec.dbf")
verarqv("rar.exe")
verarqv("recebe.bat")
verarqv("recebid.dbf")
verarqv("tar-comp.bat")
verarqv("usuario.dbf")
verarqv("tar2p.exe")
verarqv("tar2p.bat")
verarqv("tar2p.rar")
verarqv("smtpsend.exe")
FONTNAME "Arial"
FONTSIZE 9
CENTERALIGN .T.
WaitWindow() // e aqui desativa a mensagem
desativ_aguarde()
* END LABEL
END WINDOW
// Win_2.Center
*Win_2.Activate
Return Nil
Function MyRun( cRun )
Local hIn, hOut, nRet
Local hProc := HB_OpenProcess( cRun , @hIn, @hOut, @hOut )
If hProc < 0
FClose( hProc )
FClose( hIn )
FClose( hOut )
Return(.F.)
Endif
nRet := HB_ProcessValue( hProc,.f. )
If nRet > 0
FClose( hProc )
FClose( hIn )
FClose( hOut )
Return(.F.)
Endif
FClose( hProc )
FClose( hIn )
FClose( hOut )
Return .T.
Function Ver_Senha(cSenha)
If Upper(cSenha) == "HMG"
// MsgInfo("Senha aprovada")
SetProperty("Win_1","Label_0","Visible",.T.)
inst2()
*Abra_Outra()
Else
MsgStop("Senha não confere !")
SetProperty("Win_1","Text_1","Value","")
Win_1.Text_1.SetFocus()
Endif
Return Nil
#include <hmg.ch>