JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Mise à jour des modules Klaus Ven 17 Mai 2013 - 10:47 | |
| Pardon Klaus si j'interviens ici, mais ayant eu quelques difficultés avec la fonction 'officielle' de mise à jour (en fait ça ne veut pas marcher chez moi), j'ai adopté une approche un peu différente, que voici: - Code:
-
' Mise à jour de KGF.dll et autres modules LABEL Fin, GUI, Clic2, Clic, Dlf, Valide, Version, Datpdf, Datfich DIM url$, urll$(20), fi$(20), Nbfich, a$, b$, p$, nurl%, i%, j%, k%, t%, f$, tl$ DIM ver$, fv$, nf%, n%, res%, dat$, al1, al2, al3, bt1, bt2, e1, e2, e3 p$ = "C:\PANORAMIC\KLAUS\DLLs\": ' répertoire d'utilisation des modules tl$ = "C:\TELECHAR\": ' répertoire des téléchargements DATA "http://klaus.panoramic.voila.net/versions/KGF.dll" DATA "http://klaus.panoramic.voila.net/versions/KGF.pdf" DATA "http://klaus.panoramic.voila.net/versions/KGF.chm" DATA "http://klaus.panoramic.voila.net/versions/KGF.doc" DATA "http://klaus.panoramic.voila.net/versions/BDR.dll" DATA "http://klaus.panoramic.voila.net/versions/KGF_SUB.bas" DATA "http://klaus.panoramic.voila.net/versions/BDR_SUB.chm" DATA "http://klaus.panoramic.voila.net/versions/BDR_SUB.doc" DATA "http://klaus.panoramic.voila.net/versions/BDR_SUB.pdf" DATA "F" nurl% = 0: READ a$ WHILE a$ <> "F" nurl% = nurl%+1: urll$(nurl%) = a$ FOR k% = LEN(a$) TO 1 STEP -1 IF MID$(a$, k%, 1) = "/" THEN EXIT_FOR NEXT k% fi$(nurl%) = MID$(a$, k%+1, 20): ' fichier à charger READ a$ END_WHILE
DLL_ON p$+"KGF.dll" GOSUB GUI END ' ============================================================================== Fin: TERMINATE ' ============================================================================== GUI: HEIGHT 0, nurl%*25+120: WIDTH 0,340: CAPTION 0,"KGF UPDATE": BORDER_SMALL 0 FONT_NAME 0,"Arial": COLOR 0,190,255,255 al1 = 201 ALPHA al1: LEFT al1,15: TOP al1,6: FONT_COLOR al1,0,0,255: FONT_BOLD al1 CAPTION al1,"Choisir les fichiers à mettre à jour:" al2 = 202 ALPHA al2: LEFT al2,120: TOP al2,25: FONT_COLOR al2,0,0,255 CAPTION al2, "Version actuelle: Version téléchargée:"
t% = 15 FOR i% = 1 TO nurl% t% = t%+25: CHECK i%: TOP i%,t%: LEFT i%,10: WIDTH i%,280 ON_CLICK i%, Clic2: CURSOR_POINT i% e1 = i%*10+1: EDIT e1: TOP e1,TOP(i%): LEFT e1,LEFT(i%)+20: WIDTH e1,80: ' Nom e2 = e1+1: EDIT e2: TOP e2,TOP(i%): LEFT e2,LEFT(e1)+WIDTH(e1)+5: WIDTH e2,100: ' Version act e3 = e2+1: EDIT e3: TOP e3,TOP(i%): LEFT e3,LEFT(e2)+WIDTH(e2)+5: WIDTH e3,100: ' Version nouv f$ = fi$(i%): fv$ = p$ + f$ TEXT e1, f$ IF f$ = "KGF.dll" OR f$ = "BDR.dll" GOSUB Version TEXT e2, MID$(ver$, 9, 20) ELSE IF RIGHT$(f$, 4) = ".pdf" GOSUB Datpdf ELSE GOSUB Datfich END_IF TEXT e2, dat$ END_IF NEXT i% bt1 = 204 BUTTON bt1: TOP bt1,HEIGHT(0)-60: LEFT bt1,220: CAPTION bt1,"OK" ON_CLICK bt1, Clic al3 = 203 ALPHA al3: TOP al3,HEIGHT(0)-80: LEFT al3,10 bt2 = 205 BUTTON bt2: TOP bt2,TOP(bt1): LEFT bt2,100: CAPTION bt2,"Valider": HIDE bt2 ON_CLICK bt2, Valide RETURN ' ============================================================================== Clic2: ' Click sur un check FOR i% = 1 TO nurl% IF CLICKED(i%) = 1 IF CHECKED(i%) = 1 Nbfich = Nbfich + 1 ELSE Nbfich = Nbfich - 1 END_IF END_IF NEXT i% RETURN ' ============================================================================== Clic: CAPTION al3, "Chargement des fichiers..." nf% = 0 FOR n% = 1 TO nurl% IF CHECKED(n%) = 1 nf% = nf% + 1 url$ = urll$(n%): f$ = fi$(n%): ' fichier à charger GOSUB Dlf: ' téléchargement du fichier fv$ = a$: ' chemin du fichier téléchargé e3 = n%*10 + 3 IF f$ = "KGF.dll" OR f$ = "BDR.dll" GOSUB Version : ' version du nouveau fichier téléchargé b$ = MID$(ver$, 9, 20) TEXT e3, b$ ' CAPTION n%, CAPTION$(n%)+" -> "+b$ ELSE IF RIGHT$(f$, 4) = ".pdf" GOSUB Datpdf ELSE GOSUB Datfich END_IF TEXT e3, dat$ END_IF END_IF NEXT n% IF nf% = 0 THEN CAPTION al3, "": RETURN: ' pas de fichier coché CAPTION bt1,"Quitter": ON_CLICK bt1, Fin CAPTION al3,"Terminé, valider ? (décocher les modules à ne pas actualiser)" SHOW bt2 RETURN ' ============================================================================== Dlf: ' Connexion à l'url donnée et téléchargement du fichier f$ a$ = tl$ + f$ IF FILE_EXISTS(a$) = 1 THEN FILE_DELETE a$ EXECUTE_WAIT url$ WHILE FILE_EXISTS(a$) = 0: WAIT 1000: END_WHILE ' ici, fichier téléchargé dans le répertoire tl$ RETURN ' ============================================================================== Valide: ' Recopie des fichiers téléchargés dans leur répertoire d'utilisation FOR i% = 1 TO nurl% IF CHECKED(i%) = 1 a$ = fi$(i%): ' fichier IF FILE_EXISTS(tl$+a$) = 1: ' fichier téléchargé ' IF FILE_EXISTS(p$+a$) = 1 THEN FILE_DELETE p$+a$ ' FILE_COPY tl$+a$,p$+a$ EXECUTE_WAIT "CMD.exe /C COPY " + tl$+a$ + " " + p$+a$ + " /Y" FILE_DELETE tl$+a$ END_IF END_IF NEXT i% RETURN ' ============================================================================== Version: ' rechercher la version de KGF.dll ou BDR.dll, fv$ = chemin complet f$ = FILE_EXTRACT_NAME$(fv$) FILEBIN_OPEN_READ 9, fv$: a$ = STRING$(FILEBIN_SIZE(9)," "): FILEBIN_CLOSE 9 res% = DLL_CALL2("ReadBinaryFileToString",ADR(fv$),ADR(a$)) b$ = CHR$(25)+CHR$(0)+CHR$(0)+CHR$(0)+f$+" V": ' séquence cherchée (empirique) k% = INSTR(a$, b$): ver$ = f$ IF k% > 0 THEN ver$ = MID$(a$, k%+4, 25) RETURN ' ============================================================================== Datpdf: ' Date de création d'un fichier pdf dat$ = "(non trouvé)" IF FILE_EXISTS(fv$) = 1 FILEBIN_OPEN_READ 9, fv$: a$ = STRING$(FILEBIN_SIZE(9)," "): FILEBIN_CLOSE 9 res% = DLL_CALL2("ReadBinaryFileToString",ADR(fv$),ADR(a$)) b$ = "/CreationDate <": ' séquence cherchée k% = INSTR(a$, b$) dat$ = "": b$ = "" IF k% > 0 a$ = MID$(a$, k%+19,24): ' Creation Date FOR k% = 2 TO LEN(a$) STEP 2 b$ = b$ + STR$(VAL(MID$(a$, k%, 1))) NEXT k% dat$ = MID$(b$,7,2)+"/"+MID$(b$,5,2)+"/"+LEFT$(b$,4)+" " dat$ = dat$ + MID$(b$,9,2)+":"+MID$(b$,11,2) END_IF END_iF RETURN ' ============================================================================== Datfich: ' Date de création d'un fichier quelconque ' -> date d'écriture sur le disque, après téléchargement... sans intérêt dat$ = "(non trouvé)" IF FILE_EXISTS(fv$) = 1 dat$ = STRING$(255," ") res% = DLL_CALL2("GetFileDate",ADR(fv$),ADR(dat$)) dat$ = LEFT$(dat$,16): ' sans les secondes END_IF RETURN ' ============================================================================== SUB Exprog(prog$) ' Exécution d'un programme externe sans la fenêtre noire Ms-DOS ' - exemple: Exprog("Cmd.exe /c DIR C:\UTIL >C:\TEMP\Dir.txt") DIM_LOCAL scr$, bat$, qu$ scr$ = "C:\TEMP\Vbscript.vbs" bat$ = "C:\TEMP\Bat.bat" qu$ = CHR$(34) ' ===== Création du fichier .bat FILE_OPEN_WRITE 9, bat$: FILE_WRITELN 9, prog$: FILE_CLOSE 9 ' ===== Création du script .vbs FILE_OPEN_WRITE 9, scr$ FILE_WRITELN 9, "CreateObject("+qu$+"Wscript.Shell"+qu$+").Run "+qu$+bat$+qu$+",0,True" FILE_CLOSE 9 ' ===== Exécution du script EXECUTE_WAIT "WSCRIPT.exe "+scr$ FILE_DELETE bat$: FILE_DELETE scr$ END_SUB ' ============================================================================== Remarques: - Il faut adapter les variables p$ et tl$. - je n'utilise donc pas la fonction DownloadFile, mais une connexion directe sur le téléchargement du fichier. - les téléchargements se font dans le répertoire implicite de téléchargements du navigateur. - il s'affiche la date ou la version actuelle (en service) des fichiers, puis, après téléchargement, la date ou la version des fichiers téléchargés, le transfert dans le répertoire d'utilisation ne se faisant qu'à l'appui sur un bouton (avec suppression dans le répertoire de téléchargement). Les date/version de KGF.dll et BDR.dll sont lues dans le fichier lui-même, ainsi que les dates de création des fichiers pdf, Il faut noter que la date fichier donnée par la fonction GetFileDate est la date d'écriture sur le disque au moment du chargement, et non la date de création, donc sans intérêt pour comparer les versions. PS Je ne me lasse pas de la fonction ReadFileToString qui est irremplaçable par sa facilité pour analyser un fichier binaire, les fonction natives Panoramic étant bien trop limitées pour un fichier un peu long.
Dernière édition par JL35 le Ven 17 Mai 2013 - 13:31, édité 2 fois | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise à jour des modules Klaus Ven 17 Mai 2013 - 14:00 | |
| Je sais que ça existe pour les exe, et c'est aussi logique pour les dll, pareil pour les ouvrir en pièces jointes dans les emails, mais firefox ne me demande rien... Peut-être que je les ai autorisés définitivement quelque part... Je précise au passage (toujours dans mon système ci-dessus) qu'en ce qui concerne le téléchargement des pdf, c'est la 1ère page qui est présentée, il faut cliquer sur l'icône en haut à droite pour se voir proposer le téléchargement: | |
|