Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 1:20 | |
| J'ai fait un petit outil permettant de recopier automatiquement KGF.dll (ou tout autre fichier, en fait), après un téléchargement, dans un ou plusieurs dossiers cible où KGF.dll (ou un autre fichier) doit être installé, et ce à partir d'un dossier de téléchargement. Au premier lancement, le programme demande le dossier de téléchargement. Il vérifie la validité du chemin, puis crée un fichier INI dont la première ligne sera le dossier de téléchargement (source pour les copies), et toutes les lignes suivantes (inexistantes bien sûr au premier lancement) représentent les dossiers cible. Le programme affiche le dossier source et permet de le changer par un bouton, à droite. Il y a ensuite un objet LIST (vide au départ) contenant la liste des dossiers cible. 3 boutons permettent de gérer cette liste: ajouter un nouveau dossier cible (forcément différent du dossier source !), modifier un dossier cible et supprimer un dossier cible. Un autre bouton permet d'enregistrer une configuration modifiée, puis le bouton "Exécuter" lance la distribution, en fonction des dossiers configurés. A chaque étape, la validité des dossiers est vérifiée. Ce programme est adaptable à tout autre fichier - il suffit de changer les variables indiquées dans les commentaires. Voici le source: - Code:
-
' Installer_KGF.bas ' ================= ' ' Ce programme permet une installation automatisée de KGF.dll. ' Un fichier Installer_KGF.ini contient une liste de dossiers ' dans lesquels il faut copier la nouvelle version de KGF.dll. ' Au premier lancement, le fichier est créé et son contenu par défaut ' est mis en place. Ensuite, puis à chaque lancement, ce contenu ' est affiché dans un objet LIST et est modifiable. Finalement, un ' bouton "Installation" permet de recopier KGF.dll dans tous les ' dossiers configurés. ' Particularité: la première ligne contient le chemin vers le dossier ' de téléchargement de KGF.dll. KGF.dll sera copié à partir de ce dossier ' vers les autres dossiers configurés dans ce fichier. ' ' A la place de KGF.dll, tout autre fichier peut être distribué ainsi. ' Il suffit de changer le contenu des constantes fichier$ et inifile$.
labels() constantes() variables() GUI() charger_ini()
end
changer_dossier_KGF: changer_KGF() return
ajouter_dossier_cible: ajouter_cible() return
supprimer_dossier_cible: supprimer_cible() return
changer_dossier_cible: changer_cible() return enregistrer_liste: enregistrer() return executer: executer() return
sub labels() label changer_dossier_KGF label ajouter_dossier_cible, supprimer_dossier_cible, changer_dossier_cible label enregistrer_liste, executer end_sub
sub constantes() dim fichier$ : fichier$ = "KGF.dll" dim inifile$ : inifile$ = "Installer_KGF.ini" dim crlf$ : crlf$ = chr$(13) + chr$(10) end_sub
sub variables() dim dossier_KGF$ dim i% end_sub
sub GUI() width 0,800 : height 0,600 caption 0,"Installation automatisée de "+fichier$
alpha 1 : top 1,10 : left 1,10 : caption 1,"Dossier pour "+fichier$+":" alpha 2 : top 2,10 : left 2,130 : font_bold 2 button 3 : top 3,10 : left 3,740 : width 3,40 : caption 3,"..." font_bold 3 : on_click 3,changer_dossier_KGF hint 3,"Changement du dossier de téléchargement de "+fichier$ alpha 11 : top 11,40 : left 11,10 : caption 11,"Dossiers cible:" list 12 : top 12,40 : left 12,130 : width 12,600 : height 12,400 button 13 : top 13,40 : left 13,740 : width 13,40 : caption 13,"+" font_bold 13 : on_click 13,ajouter_dossier_cible hint 13,"Ajout d'un nouveau dossier cible" button 14 : top 14,70 : left 14,740 : width 14,40 : caption 14,"X" font_bold 14 : on_click 14,supprimer_dossier_cible hint 14,"Supprimer le dossier cible sélectionné" button 15 : top 15,100 : left 15,740 : width 15,40 : caption 15,"..." font_bold 15 : on_click 15,changer_dossier_cible hint 15,"Modifier le dossier cible sélectionné" button 21 : left 21,130 : top 21,460 : caption 21,"Enregistrer" on_click 21,enregistrer_liste hint 21,"Enregistrer la configuration actuelle" button 22 : left 22,580 : top 22,460 : caption 22,"Exécuter..." font_bold 22 : font_size 22,16 : width 22,150 on_click 22,executer hint 22,"Exécuter la distribution de "+fichier$+" vers tous les dossiers cible" check 23 : left 23,430 : top 23,460 : width 23,140 : caption 23,"Décompresser avant" font_bold 23 : font_color 23,255,0,0 progress_bar 31 : hide 31 : top 31,500 : left 31,130 : width 31,width(12) end_sub
sub charger_ini() dim_local f$ if file_exists(inifile$)=0 f$ = message_input$("Dossier de téléchargement de "+fichier$,"Dossier:",dir_current$+"\") if f$=dir_current$+"\" message "Le programe ne peut pas démarrer sans savoir où se trouve "+fichier$+" !" terminate end_if if right$(f$,1)<>"\" then f$ = f$ + "\" file_open_write 1,inifile$ file_writeln 1,f$ file_close 1 end_if file_open_read 1,inifile$ file_readln 1,dossier_KGF$ caption 2,dossier_KGF$ while file_eof(1)=0 file_readln 1,f$ item_add 12,f$ end_while file_close 1 if dir_exists(dossier_KGF$)=0 message "Le dossier de téléchargement est invalide :"+crlf$+dossier_KGF$+crlf$+"Veuillez le corriger !" end_if
end_sub
sub changer_KGF() dim_local f$ f$ = message_input$("Dossier de téléchargement de "+fichier$,"Dossier:",dossier_KGF$) if f$=dossier_KGF$ message "Attention ! L'anomalie n'a pas été corrigée ! else if right$(f$,1)<>"\" then f$ = f$ + "\" if dir_exists(f$)=0 message "Le dossier de téléchargement est invalide :"+crlf$+f$+crlf$+"Veuillez le corriger !" else dossier_KGF$ = f$ caption 2,dossier_KGF$ end_if end_if end_sub
sub ajouter_cible() dim_local f$ f$ = message_input$("Nouveau dossier cible:","Dossier:","") if f$<>"" if right$(f$,1)<>"\" then f$ = f$ + "\" if dir_exists(f$)=0 message "Le dossier cible est invalide: "+crlf$+f$ else if f$=dossier_KGF$ message "Le dossier de téléchargement ne peut pas être un dossier cible !" else item_add 12,f$ end_if end_if end_if end_sub
sub supprimer_cible() dim_local n%, f$ n% = item_index(12) if n%<1 message "Aucun dossier cible n'est choisi." exit_sub end_if f$ = item_index$(12) if message_confirmation_yes_no("Voulez-vous vraiment supprimer la cible:"+crlf$+f$)=1 item_delete 12,n% end_if end_sub
sub changer_cible() dim_local n%, fold$, fnew$ n% = item_index(12) if n%<1 message "Aucun dossier cible n'est choisi." exit_sub end_if fold$ = item_index$(12) fnew$ = message_input$("Nouveau dossier cible:","Dossier:",fold$) if fnew$=fold$ message "Aucun changement n'a été effectué." else if right$(fnew$,1)<>"\" then fnew$ = fnew$ + "\" if dir_exists(fnew$)=0 message "Le dossier cible:"+crlf$+fnew$+crlf$+"n'existe pas." else if fnew$=dossier_KGF$ message "Le dossier de téléchargement ne peut pas être un dossier cible !" else item_delete 12,n% item_insert 12,n%,fnew$ end_if end_if end_if end_sub
sub enregistrer() dim_local f$, i% file_open_write 1,inifile$ file_writeln 1,dossier_KGF$ if count(12)>0 for i%=1 to count(12) file_writeln 1,item_read$(12,i%) next i% end_if file_close 1 end_sub
sub executer() dim_local f$, i% if dir_exists(dossier_KGF$)=0 message "Le dossier de téléchargement est invalide :"+crlf$+dossier_KGF$+crlf$+"Veuillez le corriger !" exit_sub end_if if file_exists(dossier_KGF$+fichier$)=0 message fichier$+" n'existe pas dans le dossier source:"+crlf$+dossier_KGF$ exit_sub end_if if count(12)<1 message "La liste des dossiers cible est vide !" exit_sub end_if for i%=1 to count(12) f$ = item_read$(12,i%) if dir_exists(f$)=0 message "Ligne "+str$(i%)+": le dossier cible n'existe pas:"+crlf$+f$ exit_sub end_if next i% min 31,0 : max 31,count(12) : position 31,0 : show 31 if checked(23)=1 f$ = "UPX -d -o"+chr$(34)+dossier_KGF$+"x.dll"+chr$(34)+" "+chr$(34)+dossier_KGF$+fichier$+chr$(34) : ' +" > NUL:" file_open_write 2,"installer_KGF.bat" file_writeln 2,f$ file_close 2 execute_wait "cmd /C test_installer_KGF.bat" file_delete dossier_KGF$+fichier$ file_rename dossier_KGF$+"x.dll",dossier_KGF$+fichier$ file_delete "installer_KGF.bat" end_if for i%=1 to count(12) position 31,i% f$ = item_read$(12,i%) if file_exists(f$+fichier$)=1 then file_delete f$+fichier$ pause 100 file_copy dossier_KGF$+fichier$,f$+fichier$ next i% message "Terminé." hide 31 end_sub
EDITAh, j'ai oublié de dire: c'est 100 % Panoramic, sans utilisation de DLL !
Dernière édition par Klaus le Jeu 27 Oct 2016 - 15:32, édité 3 fois | |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 8:37 | |
| Bonjour Klaus Excellent utilitaire ! C'est vrai que KGF est partout dans mes programmes et là du coup j'ai toujours la bonne version. Quelques remarques ; - Attention au "/" à la fin du chemin source que j'ai du rajouté. - Pourrais tu aussi mettre en place un avancement de la copie de chaque ligne du LIST - Y a il une possibilité de rajouter un bouton pour choisir entre verson UPX ou NON Bon j'ai fait le tour de mes requêtes ! Merci encore et bonne journée. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 10:32 | |
| - Citation :
- - Attention au "/" à la fin du chemin source que j'ai du rajouté.
C'est fait. - Citation :
- - Pourrais tu aussi mettre en place un avancement de la copie de chaque ligne du LIST
C'est fait. - Code:
-
- Y a il une possibilité de rajouter un bouton pour choisir entre verson UPX ou NON Je vais voir ça... EDITDécompression - c'est fait. | |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 14:53 | |
| Merci Klaus.
Mais il y a quelques erreurs... Ligne 111 et 136 => RIGHT$(f$) => RIGHT$(f$,1)
Et il y a aussi des soucis dans les chemins ligne 251... | |
|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 16:09 | |
| Aucune idée !
MESSAGE : (113) FILE already exists. Line : 251 EDIT : Je viens de trouver. Il s'agissait d'une application en cours d'utilisation. Désolé Klaus... | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 16:23 | |
| Tant mieux ! J'espère ce que petit outil servira aux utilisateurs de KGF.dll, et au-delà, à tous ceux qui doivent dupliquer un module quelconque dans une liste de dossiers. | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Utilitaire automatique de distribution de KGF.dll (ou autre) Jeu 27 Oct 2016 - 17:05 | |
| J’ai testé : Ok. Bonne idée, ce petit outil, merci Klaus. Personnellement j’ai crée depuis longtemps, un dossier sur le bureau au nom de DLL où j’ai déposé KGF.DLL en plus d’autres DLL que j’utilise parfois. J’ai ajouté le chemin de ce dossier DLL à la variable d’environnement PATH. Dorénavant plus de soucis de chemin de KGF.DLL et pas besoin de dupliquer KGF.DLL dans d’autres dossier. Une seule copie de KGF.DLL suffit pour tout le monde. Il suffit d’écrire dans un programme qui utiliserait KGF.DLL, la ligne - Code:
-
DLL_ON "KGF.DLL"
Sans se soucier de son emplacement. @Ceux qui ne connaissent pas ou qui ne se souviennent pas de comment ajouter un chemin à la variable d’environnement PATH, consultez cette page. | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Jeu 27 Oct 2016 - 21:17 | |
| Perso, j' ai créé un dossier "c:\KGF" dans lequel je place la dernière version et dans mes sources je mets une variable kgf$ avec l' adresse. Plus de souci de multiplication de la dll dans mon ordi. | |
|