1

Konu: internetten yeni exe kontrolu

ana kullanılan program c:\x\x.exe programı var program çalışmadan önce internet üzerinde  yeni versiyonu olup olmadığına bakılacak varsa x.exe  c:\x\ dizini altına kopyalananacak. 
Bunu nasıl yaparım ?
.bat  dosyası ile bu iş yapılır mı ?
Tecrübesi olan var mı ?

Benim aklıma gelen acilis.exe diye bir program yapıp bu programla internetteki dosyayı kontrol etmek varsa
download etmek yoksa x.exe yi çalıştırmak ..



teşekkurler

2

Re: internetten yeni exe kontrolu

Sayın Konuralp
Ben programın açılışında internetteki exe dosyasının boyutunu alıyor ve c deki exe nin boyutu ile karşılaştırıyordum. Eğer eşit değilse yeni versiyon var demektir. Kullanıcıya uyarı mesajı  ile güncelleme yapmasını hatırlatıyordum.

3

Re: internetten yeni exe kontrolu

Bu konuda hali hazirda mevcut uygulamasi olan ve oldukca basarili bir sekilde devam Timucin doyurucu bir cevap verecektir.
pratik olarak Menteş in yaklasimi dogru bence siralama soyle olmali

1-internet baglantisi varmi yokmu ? yoksa devam exe calissin
2-baglanti var kullaniciyi uyar yeni versiyon var diye ister o anda yada daha sonra indirsin ve devam etsin.
3-uygulamanizin ticari sekline gore kullanicinin guncellemeleri indirip indirememe kontrolunu de goz onunde bulundurun.
   bakım anlasmasi var yada yok vs tamamen ticari seklinize gore hareket meselesi.

teknik olarak internet baglanti kontrolu ve dosya  karsilastirma kodlari forumda mevcut bildigim kadari ile.
ama ben genede kendim den biraz ornekleme yapayim


Visual Fox Pro
Function check_tcmb

&& baglanti testi ornegi
    Local lcTCMB
    lcTCMB=[http://www.tcmb.gov.tr/kurlar/today.xml]
    Declare Integer InternetCheckConnection In Wininet.Dll String Url, Long dwFlags, Long Reserved
    If InternetCheckConnection(lcTCMB, 1, 0) != 0
        Return .T.
    Else
        Return .F.
    Endif
Endfunc

dosya karsilastirma ve indirme rutini burada temel olarak server a baglanip xml dosyasi indirilip o dosyadaki versionlar ile mevcut exe karsilastiriliyor
fark varsa version klasorune indiriliyor. Ben burada her seferinde exe download edip guncelleme yapacakmisiniz gibi gereksiz islemlere gerek kalmamasina gayret ettim tum referans serverdaki version.xml den geliyor.

daha pratik ve kisa yontemi olan arkadaslar da elbet birsey katacaklardir. ozellikle httpGet olayi dahada kisaltir biliyorum ama bende ne oldu calismadi bilmiyorum araya birseyler girdi kaldi sad

Visual Fox Pro
&& cmd_download kodu 

 
If Empty(This.Parent.cbo_version.Value)
    Return
Endif
 
If Not Directory(Lower('Version'))
    Mkdir Sys(5)+Curdir()+'Version'
Endif
 
Local LcCurrentdir,LcUpdateDir,LcLocalFile,LcFtpFile,lcFtAcc,lcFtpUser,;
    lcFtp,FtpPass,lcFtpRemoteDir,lcFtpLocalDir,lcFtpFilename,lcFtpFVersion
 
LcUpdateDir=Sys(5)+Curdir()+'Version'
 
External Array arrFtp
If _vfp.StartMode # 0
    Select * From Addbs(m.gcData)+'ftp' Where ftp.Sno = This.Parent.nsno Into Array arrFtp
Else
    Select * From 'data\ftp' Where ftp.Sno = This.Parent.nsno Into Array arrFtp
Endif
 
lcFtpAcc = Iif(_Tally=0,'',arrFtp[1,5])
lcFtpUser = Iif(_Tally=0,'',arrFtp[1,6])
lcFtpPass = Iif(_Tally=0,'',arrFtp[1,7])
lcFtpRemoteDir = Iif(_Tally=0,'',Alltrim(arrFtp[1,8]))
lcFtpLocalDir = Iif(_Tally=0,'',Alltrim(arrFtp[1,9]))
lcFtpFilename = Iif(_Tally=0,'',Alltrim(arrFtp[1,11]))
lcFtpFVersion = Iif(_Tally=0,'',arrFtp[1,12])
 
If arrFtp[1,1]=2 &&
    Local lcXMLFile
    lcXMLFile=Fullpath('version.xml')
    *    If File(m.lcXMLFile)
    *        Erase (m.lcXMLFile)
    *    Endif
 
    Do Prog\version_download With m.lcFtpRemoteDir,m.lcFtpLocalDir,'version.xml'
 
    Create Cursor _crsFTP_( ;
        selected L,Session C(30),HostName C(30),username C(15),Password C(15),;
        remotedir C(50),localdir C(50),filename C(20),fversion C(12))
 
    Xmltocursor(m.lcXMLFile,'_crsFtp_',512+8192)
 
    Local cFullVer,cRightVer
    Dimension aFiles[1]
    Agetfileversion(aFiles,"depomatik.EXE")
    cFullVer=aFiles[4]
    cRightVer=Right(aFiles[4],4)
 
    If Right(_crsFTP_.fversion,4) <= m.cRightVer
        Messagebox('Bu Dosyanın Güncel Sürümü Zaten Var Güncelleme Yapmanıza Gerek Yok...',16,_Screen.Caption)
        Return
    Else
        If Messagebox('Yeni Version Bulundu...Indirmek İstiyormusun ?',32,'Yeni Version')=6 &&yes
            Do Prog\version_download With m.lcFtpRemoteDir,m.lcFtpLocalDir,m.lcFtpFilename
        Endif
    Endif
Endif
 
Do Prog\version_download With m.lcFtpRemoteDir,m.lcFtpLocalDir,m.lcFtpFilename


version_download.prg kodu

Visual Fox Pro
Lparameters tcFtpRemoteDir,tcFtpLocalDir,tcFtpFilename

 
*!*    WAIT WINDOW tcFtpRemoteDir
*!*    WAIT WINDOW tcFtpFilename
*!*    WAIT WINDOW tcFtpLocalDir
 
*SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
Set Library To "fll\vfpconnection.fll"
 
*HTTPGet(m.lcFtpRemoteDir + m.lcFtpFilename, m.lcFtpLocalDir +'\'+m.lcFtpFilename, Thisform.myprogress(nConnectTotalBytes,nConnectBytesSoFar)  , Thisform.mytrace(nTraceDataType,cTraceData) )
Local lcRemoteFile,lcLocalFile,lcMessageOK
lcRemoteFile = m.tcFtpRemoteDir + m.tcFtpFilename
lcLocalFile = Sys(5)+Curdir() + Addbs(m.tcFtpLocalDir) + m.tcFtpFilename
 
lcMessageOK = 'Dosya İndirme İşlemi Tamamlandı....+ Chr(13) + Chr(13) +;
    'İndirilen Dosya : ' + Upper(m.tcFtpFilename) + Chr(13) + ;
    'İndirilen Klasör : ' + Sys(5)+Curdir() + Upper(m.tcFtpLocalDir)
 
*?HTTPGet("http://www.somedomain.com/Source.htm", "C:\Destination.htm", "MyProgress()", "MyTrace()")
 
If HTTPGet(m.lcRemoteFile,m.lcLocalFile , "MyProgress()", "MyTrace()")
    Messagebox(m.lcMessageOK,64,_Screen.Caption)
Endif
 
***********************
Function myprogress() && Callback from the FLL - can be used to track operation progress
    ***********************
    *!* You can create your own function, procedure or method to handle this and name it whatever you want.
    *!* The nConnectTotalBytes and nConnectBytesSoFar are private variables created on-the-fly by the FLL
    *WAIT WINDOW NOWAIT "İndiriliyor......"
    Wait Window Nowait "Downloading...." + Tran(m.nConnectTotalBytes,'999,999,999')
    *frm_download.txt_total.value = m.nConnectTotalBytes
    Wait Window Nowait "Downloading...." + Transform(m.nConnectBytesSoFar,'999,999,999')
    *frm_download.txt_sofar.value = m.nConnectBytesSoFar
    Keyboard '{TAB}' &&fake to clear ww
Endfunc
 
***********************
Function mytrace() && Callback from the FLL - used to provide a detailed trace of the operation
    ***********************
    *!* You can create your own function, procedure or method to handle this and name it whatever you want.
    *!* The nTraceDataType and cTraceData are private variables created on-the-fly by the FLL
    #Define TYPE_TEXT 0
    #Define TYPE_HEADER_IN 1
    #Define TYPE_HEADER_OUT 2
    #Define TYPE_DATA_IN 3
    #Define TYPE_DATA_OUT 4
    #Define TYPE_SSL_DATA_IN 5
    #Define TYPE_SSL_DATA_OUT 6
    #Define TYPE_END 7
 
    Wait Window Nowa  Icase(m.nTraceDataType = TYPE_TEXT, "STATUS:", ;
        m.nTraceDataType = TYPE_HEADER_IN, "<RECV HEADER: ", ;
        m.nTraceDataType = TYPE_HEADER_OUT, ">SEND HEADER: ", ;
        m.nTraceDataType = TYPE_DATA_IN, "<RECV DATA: ", ;
        m.nTraceDataType = TYPE_DATA_OUT, ">SEND DATA: ", ;
        m.nTraceDataType = TYPE_SSL_DATA_IN, "<RECV SSL DATA: ", ;
        m.nTraceDataType = TYPE_SSL_DATA_OUT, ">SEND SSL DATA: ", ;
        m.nTraceDataType = TYPE_END, "END: ", "UNKNOWN: ")
    && m.cTraceData
Endfunc

4

Re: internetten yeni exe kontrolu

hFile = FtpOpenFile(hConnection, fdosya1, 0x80000000, 2, 0)
If hFile = 0
   Return
Endif

Yukarıdaki kodla   bazı bilgisayarlarda problem yaşıyorum. If hfile satırına gelmiyor. Devamlı beklemede kalıyor. Ben win 7 32 bit kullanıyorum. bir problem yok. problem yaşadığım bilgisayarlardan biri 64 bit .  Diğeri 32 bit.   0x80000000 degeri için alternatif var mı ?