George
Code: Select all
FUNCTION Main()
// In this sample the name of our program is 'MyProgram.exe'
//The name of the version to be downloaded from internet server is '_MyProgram.exe'
//Add to the start of your program
// Name of the running program, including the path
cPathAppliName := alltrim(hb_argv( 0 ))
nLen := len(cPathAppliName)
nAtNum := atnum( "\", cPathAppliName)
nPos := nLen - nAtNum
// name of the running program only
// Could be 'MyProgram.exe' oor "_MyProgram.exe"
cAppliName := right(cPathAppliName, nPos)
// Original program name
cOrigAppli := alltrim(cAppliDir) + "\MyProgram.exe"
// Ck if is running the downloaded program "_MyProgram.exe"
IF upper((cPathAppliName)) <> upper((cOrigAppli))
// Yes is running the new vesionn!!!
// Erase the original 'MyProgram.exe'
ferase(cOrigAppli) <> 0
syswait(1)
// Rename the new version with the name of the original version
RENAME "_MyProgram.exe" TO "MyProgram.exe"
ENDIF
/*
Your code
*/
RETURN (.T.)
FUNCTION CkUpdate()
// This is the function that you execute to verify
// if exist a new version of your software
dbselectarea("PATHFILE") // File with server's parameters
cAlias := alias()
GO 1
cServFtp := alltrim((cAlias)->SERVER) // Server address
cUserFTp := alltrim((cAlias)->USER) // User Name
cPassFTp := alltrim((cAlias)->PASSW) // Password
cServPath := alltrim((cAlias)->SERPATH) // Server path for _MyProgram.exe'
cVersion2 := (cAlias)->VERSION // Current Version of 'MyProgram.exe'
Dbcloseall()
// Go to the server to download last version number
IF !GetUpdateFromServer(cServFtp, cUserFTp, cPassFTp, cServPath, cVersion2 )
// Do not exist a new version or connection to server failed
RETURN .F.
ENDIF
// New version '_MyProgram.exe' has beeb downloaded from internet server
cFileExe := (cAppliDir) + "\_MyProgram.exe"
OpenFiles() // Function to open the database
// RUN THE NEW VERSION '_MYPROGRAM.EXE' DOWNLOADED FROM INTERNET SERVER
WinExec("_MyProgram.exe")
// 'KILL' THE CURRENT SOFTWARE 'MYPROGRAM.EXE'
PostQuitMessage(0)
__Quit()
RETURN (.T.)
Function GetUpdateFromServer( cServFtp, cUserFTp, cPassFTp, cServPath, cVersion2 )
Local oInternet, oFtp, oMeter, oText
Local cTitle := "Connecting to SDN Server", lExistAlt := .F.
LOCAL hInternet, hConnect, cAlias, cAlias1, cNewTitle, lGetFileAll := .F.
PRIVATE oSay
// Dialog with a message indicating conection to server
DEFINE DIALOG oDlg RESOURCE "DIALOG_13";
TITLE cTitle
REDEFINE SAY oSay ID 55 of oDlg
ACTIVATE DIALOG oDlg NOWAIT
oSay:SetText ("Checking for update....")
hLib = LOADLIBRARY( "wininet.dll" )
hInternet = INETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )
hConnect = INETCONNECT( hInternet, cServFtp, INTERNET_INVALID_PORT_NUMBER,;
cUserFTp, cPassFTp, INTERNET_SERVICE_FTP, 0, 0 )
IF hConnect = 0
MsgAlert("Connection to server failed!" + chr(13)+;
"Please check your internet connection and try later.")
oDlg:end()
OpenFiles()
RETURN .F.
ENDIF
// P_VERS.DBF is a file wih one field with the Program Version Number
cDownUPD := cAppliDir + "\P_VERS.DBF"
cLastUPD := cServPath + "/P_VERS.DBF"
lGetLastUPD := FTPGETFILE( hConnect, cLastUPD, cDownUPD, 0, FILE_ATTRIBUTE_ARCHIVE, 0, 0 )
IF !lGetLastUPD
MsgAlert("P_VERS Downloaded failed!" + chr(13) +;
"Please check your internet connection!")
INETCLOSEHANDLE( hConnect )
INETCLOSEHANDLE( hInternet )
FREELIBRARY( hLib )
OpenFiles()
oDlg:End()
RETURN .F.
ENDIF
OpenFiles()
dbselectarea("P_VERS")
cAlias := alias()
GO 1
cVersion1 := (cAlias)->VERSION
dbcloseall()
// Compare the VERSION No. of the current software that is running
// with the VERSION No. of the software that is in internet server
IF alltrim(cVersion1) == alltrim(cVersion2)
// If is the same number, ther are not new version.
Msginfo(" You already have the most recent version.")
INETCLOSEHANDLE( hConnect )
INETCLOSEHANDLE( hInternet )
FREELIBRARY( hLib )
OpenFiles()
oDlg:End()
RETURN .F.
ENDIF
// If different proceed to download the new program version that is in the Server
cDataSDN := cServPath + "/_MyProgram.exe"
cPathDir := cAppliDir + "\_MyProgram.exe"
oDlg:End()
MsgRun( "Downloading Update Files Please Wait...", "My Program",;
{ || lGetFileAll := FTPGETFILE( hConnect, cDataSDN, cPathDir, 0, FILE_ATTRIBUTE_ARCHIVE, 0, 0 ) } )
IF !lGetFileAll
MsgAlert("File Downloaded failed!" + chr(13) +;
"Please check your internet connection!")
INETCLOSEHANDLE( hConnect )
INETCLOSEHANDLE( hInternet )
FREELIBRARY( hLib )
OpenFiles()
RETURN .F.
ENDIF
INETCLOSEHANDLE( hConnect )
INETCLOSEHANDLE( hInternet )
FREELIBRARY( hLib )
oDlg:end()
RETURN .T.