Page 1 sur 1
[..] Progression graphique + installation KB
Posté : ven. 08 juin 2012 23:57
par toniino38
Bonjour à tous,
Pour vous situer un peu le contexte je cherche à créer un WSUS Offline très particulier concernant la messagerie Exchange Office 365 (les KB n'étant pas tous disponible sur le catalogue de WSUS). Pour cela il faut installer un certain nombre de MAJ spécifique pour Office 2007 et Office 2010.
Dans mon script j'aimerai :
1 : Vérification de la version d'Office (
2007 ou 2010)
2 : Installation d'un
lot de KB en paramètre
/quiet en fonction de la version d'Office détectée.
3 : Afficher une barre de progression qui nous indique le pourcentage de l'avancement et le nom de chaque KB qu'il installe.
J'ai cherché un peu à droite à gauche je suis arriver à un script :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3> ;Librairie graphique
HotKeySet("{ESC}", "endscript") ;Touche de raccourci pour exit
; *** DECLARATION DES VARIABLES => CLEFS DE REGISTRE ***
$reg2007 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot","Path")
$reg2010 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot","Path")
;*** Si Office 2007 installé alors : ***
If $reg2007 = "" Then
$KB2289158 = Run("Microsoft Office 2007 Security Update\Office2007-kb2289158-fullfile-x86-glb.exe /quiet")
$KB2596993 = Run("Microsoft Outlook 2007 Update\office-kb2596993-fullfile-x86-glb.exe /quiet")
$Ca = GUICreate ( "" , 250 , 46 , -1 , -1 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel (" Installation en cours ...", 23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)
_SliderRight()
Func _getmsg()
$Msg = GUIGetMsg()
If $Msg = $GUI_EVENT_CLOSE Then Exit
; Vérification de l'existence des ces KB
If ProcessExists($KB2289158,$KB2596993)=0 Then endscript()
EndFunc
Func _SliderRight()
Local $newcolor,$color = 0x050000
For $m = 0 To 245 Step 5
$newcolor += $color
$ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
GUICtrlSetBkColor($ba, $newcolor)
Sleep(50)
Next
_getmsg()
_SliderLeft()
EndFunc
Func _SliderLeft()
Local $backcolor,$color = 0x050000
For $m = 245 To 0 Step -5
$backcolor += $color
$ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
GUICtrlSetBkColor($ba, $backcolor)
Sleep(50)
Next
_getmsg()
_SliderRight()
EndFunc
Func endscript()
Exit
EndFunc
Elseif $reg2010 = "" Then
Run("Microsoft Office 2010 Update\Office2010-kb2566458-fullfile-x64-glb.exe /quiet")
Run("Microsoft Office 2010 Update\Office2010-kb2566458-fullfile-x86-glb.exe /quiet")
Run("Microsoft Office 2010 Update\office-kb2435954-fullfile-x64-glb.exe /quiet")
Run("Microsoft Office 2010 Update\office-kb2435954-fullfile-x86-glb.exe /quiet")
Run("Microsoft Outlook 2010 Update\outlook2010-kb2597011-fullfile-x64-glb.exe /quiet")
Run("Microsoft Outlook 2010 Update\outlook2010-kb2597011-fullfile-x86-glb.exe /quiet")
Run("Microsoft OneNote 2010 Update\onenote2010-kb2523130-fullfile-x64-glb.exe /quiet")
Run("Microsoft OneNote 2010 Update\onenote2010-kb2523130-fullfile-x86-glb.exe /quiet")
Else
MsgBox(1,"Pack Office non présent","Outlook 2007 ou 2010 n'est pas installé.")
Exit
Je suis relativement novice en développement. Si vous pouvez m'aider à avancer ce serait sympa, je bloque un peu sur la mise en place de la progression graphique et notamment l'affichage du nom du KB quand il l'installe.
Merci beaucoup

Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 02:40
par toniino38
J'ai avancé un peu sur la mise en forme graphique, je me suis aidé de Koda le rendu me va bien maintenant ce qu'il me manque c'est l'animation du progress et là je sèche vraiment !!
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; *** DECLARATION DES VARIABLES => CLEFS DE REGISTRE ***
$reg2007 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot","Path")
$reg2010 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot","Path")
If $reg2007 = "" Then
$versionoffice = "2007"
ElseIf $reg2010 = "" Then
$versionoffice = "2010"
Else
$versionoffice = ": Produit non installé."
EndIf
; *** DECLARATION DES VARIABLES => KB Office 2007 ***
$KB2289158 = Run("Microsoft Office 2007 Security Update\Office2007-kb2289158-fullfile-x86-glb.exe /quiet")
$KB2596993 = Run("Microsoft Outlook 2007 Update\office-kb2596993-fullfile-x86-glb.exe /quiet")
; *** DECLARATION DES VARIABLES => Graphique ***
Global $Largeur = 500, $Hauteur = 450, $Titre = "MAJ pour Office 365"
Local $Ver = "Version 1.0"
#Region ### START Koda GUI section ### Form=c:\form1.kxf
$Form1_1 = GUICreate($Titre & " - " & $Ver, $Largeur, $Hauteur, 167, 130)
GUISetFont(12, 400, 0, "Arial")
GUISetBkColor(0xFFFFFF)
$Progress1 = GUICtrlCreateProgress(72, 248, 361, 25)
GUICtrlSetColor(-1, 0x99B4D1)
GUICtrlSetBkColor(-1, 0x000000)
$Pic1 = GUICtrlCreatePic("Microsoft-office-365.jpg", 144, 296, 225, 137)
$Label1 = GUICtrlCreateLabel("La version d'Office installée est " & $versionoffice & " !", 72, 112, 283, 22)
GUICtrlSetColor(-1, 0x808080)
$Label2 = GUICtrlCreateLabel("Installation en cours : " & $KBinstall & " ...", 72, 208, 52, 22)
GUICtrlSetColor(-1, 0x808080)
$Pic2 = GUICtrlCreatePic("Logo.jpg", 104, 16, 283, 78)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Form1_1
EndSwitch
WEnd
Ce que j'aimerai faire c'est :
- Suivant la version détectée 2007 ou 2010 j'aimerai lancer la liste des KB à installer (je ne sais pas où placer cette condition dans tous mes essais cela ne marchait pas).
- Afficher dans le $Label2 le nom du KB qui est en cours d'installation.
- Avoir une barre de progression qui progresse en fonction de l'installation de l'ensemble des MAJ (et non pas 0 to 100 à chaque MAJ).
Merci beaucoup à ceux qui veulent bien m'aider =)
Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 10:30
par mikell
Au moins pour tester tu pourrais essayer ça :
Code : Tout sélectionner
$KB2289158 = "Microsoft Office 2007 Security Update\Office2007-kb2289158-fullfile-x86-glb.exe"
$btninstall = GUICtrlCreateButton("Installer", 210, 300, 80, 25)
et mettre ça dans le While
Code : Tout sélectionner
Case $btninstall
Switch $versionoffice
Case 2007
GuiCtrlSetData($Label2, "Installation en cours : " & $KB2289158 & " ..."
Run($KB2289158 & " /quiet")
Case 2010
;....
EndSwitch
Pour la progressbar, ça se calcule en faisant le % de fichier installé/taille totale avec un GuiCtrlSetData sur la progressbar... si tu n'as pas ces données, ça va être dur
Pourquoi ne pas laisser s'afficher la barre du fichier d'installation ?
Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 11:31
par toniino38
Tout d'abord merci beaucoup pour ta réponse
Au moins pour tester tu pourrais essayer ça :
Code : Tout sélectionner
$KB2289158 = "Microsoft Office 2007 Security Update\Office2007-kb2289158-fullfile-x86-glb.exe"
$btninstall = GUICtrlCreateButton("Installer", 210, 300, 80, 25)
J'ai créé mon bouton qui me sert à déclencher mon action jusque là pas de soucis.
Ensuite je crée mon while case :
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $btninstall
Switch $versionoffice
Case 2007
GuiCtrlSetData($Label2, "Installation en cours : " & $KB2289158 & " ...")
Run($KB2289158 & " /quiet")
Case 2010
;....
EndSwitch
EndSelect
WEnd
Quand je fais F5 que le script se lance je n'ai aucune erreur pourtant je ne peux pas cliquer sur le bouton Installer il ne se presse pas y aurait-il d'autres paramètres à lui ajouter ?
Pour la progressbar, ça se calcule en faisant le % de fichier installé/taille totale avec un GuiCtrlSetData sur la progressbar... si tu n'as pas ces données, ça va être dur
La taille totale de toutes les MAJ réunis ou seulement d'une seule ? Dans tous les cas j'ai la taille mais ne connaît pas l'unité de mesure dans laquelle je dois les saisir.
Pourquoi ne pas laisser s'afficher la barre du fichier d'installation ?
Si je laisse la barre d'installation s'afficher elle va s'afficher pour une seule MAJ puis se fermer et lancer la deuxième mise à jour et ainsi de suite. Je préfère vraiment cloisonner mes utilisateurs dans une interface GUI simple car si j'affiche la barre d'installation à chaque MAJ je risque d'avoir des retours de personnes qui dès qu'ils voient une MAJ finit vont fermer le script. C'est pourquoi je veux vraiment une interface GUI simple avec un seul bouton "Installer", un Label pour nous leur dire s'ils ont un 2007 ou 2010 et enfin un Label qui indique la MAJ qui est en train de s'installer tout ça représenter par une barre de progression unique qui quand elle arrivera à la fin les utilisateurs seront invités quitter proprement.
Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 12:12
par mikell
Si tu as bien défini ton bouton dans le code de la gui, je vois pas pourquoi il ne marcherait pas
Pour la progressbar, l'unité de mesure de taille on s'en fout (Ko, Mo) pourvu que ce soit la même dans tout le calcul
Pour l'affichage, si tu veux que la progressbar suive l'ensemble des MAJ, alors faut la taille de l'ensemble des MAJ, etc
Le problème va être :
- Mesurer (dans une boucle) la taille de ce qui a déjà été installé, ça tu peux le faire avec un DirGetSize sur le répertoire dans lequel tu vas installer les fichiers, par exemple
- Calculer le % par rapport à la taille totale des fichiers à installer
- transmettre ce % à la progressbar
Bon courage

Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 12:22
par toniino38
Si tu as bien défini ton bouton dans le code de la gui, je vois pas pourquoi il ne marcherait pas
Et bien c'est également ce que je ne comprends pas car le bouton est bien définie dans la GUI :
► Afficher le texte
Code : Tout sélectionner
;*** INCLUDE DES LIBRAIRIES ***
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; *** VERIFICATION DE LA VERSION ***
RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot","Path")
If @error = "0" Then
$versionoffice = "2007"
Else
EndIf
RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot","Path")
If @error = "0" Then
$versionoffice = "2010"
Else
EndIf
; *** DECLARATION DES VARIABLES => KB Office 2007 ***
$KB2289158 = "Microsoft Office 2007 Security Update\Office2007-kb2289158-fullfile-x86-glb.exe"
;$btninstall = GUICtrlCreateButton("Installer", 210, 300, 80, 25)
; *** DECLARATION DES VARIABLES => Graphique ***
Global $Largeur = 500, $Hauteur = 450, $Titre = "MAJ pour Office 365"
Local $Ver = "Version 1.0" , $msg,$Label2,$btninstall,$Progress1
#Region ### START Koda GUI section ### Form=c:\form1.kxf
$Form1_1 = GUICreate($Titre & " - " & $Ver, $Largeur, $Hauteur, 167, 130)
GUISetFont(10, 400, 0, "Arial")
GUISetBkColor(0xFFFFFF)
$Progress1 = GUICtrlCreateProgress(72, 248, 361, 25)
GUICtrlSetColor(-1, 0x99B4D1)
GUICtrlSetBkColor(-1, 0x000000)
$Pic1 = GUICtrlCreatePic("Microsoft-office-365.jpg", 144, 296, 225, 137)
$Label1 = GUICtrlCreateLabel("La version d'Office installée est " & $versionoffice & " !", 72, 112, 283, 22)
GUICtrlSetColor(-1, 0x808080)
$btninstall = GUICtrlCreateButton("Installer", 210, 300, 80, 25)
$Label2 = GUICtrlCreateLabel("Cliquez sur Installer pour lancer la mise à jour.", 72, 208, 283, 22)
GUICtrlSetColor(-1, 0x808080)
$Pic2 = GUICtrlCreatePic("Logo.jpg", 104, 16, 283, 78)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $btninstall
Switch $versionoffice
Case 2007
MsgBox(4096,"TEST 2007","Je rentre bien dans l'installation")
GuiCtrlSetData($Label2, "Installation en cours : " & $KB2289158 & " ...")
Run($KB2289158 & " /quiet")
Case 2010
;....
EndSwitch
EndSelect
WEnd
Je ne rentre même pas dans mon case puisque je ne peux pas afficher le MsgBox.
Pour la progressbar, l'unité de mesure de taille on s'en fout (Ko, Mo) pourvu que ce soit la même dans tout le calcul
Pour l'affichage, si tu veux que la progressbar suive l'ensemble des MAJ, alors faut la taille de l'ensemble des MAJ, etc
Le problème va être :
- Mesurer (dans une boucle) la taille de ce qui a déjà été installé, ça tu peux le faire avec un DirGetSize sur le répertoire dans lequel tu vas installer les fichiers, par exemple
- Calculer le % par rapport à la taille totale des fichiers à installer
- transmettre ce % à la progressbar
Bon courage
Merci beaucoup pour le raisonnement je m'y mets dès que j'ai réglé ce problème de case

Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 13:18
par toniino38
En cherchant j'ai réussi à cibler le problème il vient de :
► Afficher le texte
Code : Tout sélectionner
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
MsgBox(4096,"TEST FERMETURE","OK je passe le GUI EVENT CLOSE")
ExitLoop
Case $msg = $btninstall
MsgBox(4096,"TEST btninstall","Je rentre bien dans le case btninstall")
If $versionoffice = "2007" Then
MsgBox(4096,"TEST 2007","Je rentre bien dans l'installation")
;GuiCtrlSetData($Label2, "Installation en cours : " & $KB2289158 & " ...")
;Run($KB2289158 & " /quiet")
Elseif $versionoffice = "2010" Then
MsgBox(4096,"TEST2010","Je rentre bien dans l'installation")
EndIf
EndSelect
WEnd
Il s'agit du Case $msg = $btninstall en fait à aucun moment il ne rentre dans le case.
Dans le case GUI_EVENT_CLOSE aucun problème si je met une MsgBox dedans je la reçois bien quand je clique sur fermer.
EDIT :
J'ai trouvé ! Il s'agit en réalité du bouton installer qui (bien que non visible quand on regarde le programme car le fond de l'image est en blanc ^^) "mord" sur son espace, en changeant les valeurs de mes GUI pour lui donner un peu plus d'espace (ça se joue à 10pixel) et ben le bouton fonctionne sans problème !!!
Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 14:06
par mikell
ça serait sympa que tu édites tes messages et que tu mettes des balises "spoiler" pour encadrer les balises de code (pour les codes volumineux)
Re: [..] Progression graphique + installation KB
Posté : sam. 09 juin 2012 14:20
par toniino38
mikell a écrit :ça serait sympa que tu édites tes messages et que tu mettes des balises "spoiler" pour encadrer les balises de code (pour les codes volumineux)
C'est fait

Re: [..] Progression graphique + installation KB
Posté : mar. 12 juin 2012 11:54
par toniino38
Je reviens vers vous car je bloque un peu sur la barre de progression tout le reste fonctionne.
J'utilise le
GUICtrlCreateProgress et je trouve aucune infos malheureusement sur comment animer cette progress dois-je utiliser le ProgressOn ?
Voici un exemple de ce que j'ai fais pour le moment :
Code : Tout sélectionner
If $versionos = "WIN_7" or "WIN_VISTA" Then
;GUICtrlSetData($btninstall, "Stop")
;For $i = $s To 100 Step 10
GuiCtrlSetData($Label2, "Installation en cours : " & $KB2289158 & " ...")
#RequireAdmin
RunWait($KB2289158 & " /quiet")
;Next
; If $i < 100 Then
; $s = 50
; GUICtrlSetData($Progress1, $s)
; EndIf
GuiCtrlSetData($Label2, "Installation en cours : " & $KB2596993 & " ...")
#RequireAdmin
RunWait($KB2596993 & " /quiet")
;Next
;If $i < 100 Then
;$s = 100
; GUICtrlSetData($Progress1, $s)
; EndIf
GuiCtrlSetData($Label2, "Installation en terminée. ")
;ExitLoop
J'ai mis en commentaire tout ce qui appartient à la progressbar (si j'enlève je me retrouve avec plein d'erreur sur mes EndIf. Si quelqu'un pourrait m'éclairer sur la syntaxe à adopter
Merci beaucoup