[..] Installation logiciel avec test clé de registre
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[..] Installation logiciel avec test clé de registre
Bonjour,
je cherche une solution pour installer des mises a jour de soft ( acrobat reader et autres) sur des postes client en windows XP.
Je souhaite faire un test dans la base de registre si le soft exist ( test de version ect...)
J'ai cherche sur le siste et je n'ai pas trouve de solution a mon probleme.
en gros voila ce que je cherche
avec la commande IF
IF " Hkey\..... exist" then ne pas installé le logiciel sinon et bien installer le logiciel
le pourquoi verifier dans la base de registre : je peux connaitre la version installé et de plus pour les plugiciels je ne peux verifier que dans la base de registre parcequ'ils ne sont pas dans le add and remove programms.
merci de votre aide
Opium95270
je cherche une solution pour installer des mises a jour de soft ( acrobat reader et autres) sur des postes client en windows XP.
Je souhaite faire un test dans la base de registre si le soft exist ( test de version ect...)
J'ai cherche sur le siste et je n'ai pas trouve de solution a mon probleme.
en gros voila ce que je cherche
avec la commande IF
IF " Hkey\..... exist" then ne pas installé le logiciel sinon et bien installer le logiciel
le pourquoi verifier dans la base de registre : je peux connaitre la version installé et de plus pour les plugiciels je ne peux verifier que dans la base de registre parcequ'ils ne sont pas dans le add and remove programms.
merci de votre aide
Opium95270
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] installation logiciel avec test cle de registre
En tant que packageur je suis régulièrement confronté a ce genre de probleme dans le cadre de mon travail.
Solution pour tester la présence d'un logiciel :
Lors de l'installation tu lui fais créer une clé de registre. Perso, je fais créer dans
HKLM\SOFTWARES\[NOM de la société]\[Nom de l'application]
les valeurs :
Version=[Version]
Date_Install=[Date de l'installation]
Ca te permet de tester si l'appli est présente et si a la date de l'installation c'est bien la version qui est en prod qui a été installée, et pas une version en préprod, ou au contraire une qui avait été retirée parceque trop vieille.
Par exemple
HKLM\SOFTWARES\ForumAutoItFrancais\AcrobatReader
Version=9.0.0.0
Date_Install=20101201
(le fait de noter la date AAAAMMJJ permet de comparer directement le chiffre obtenu avec un autre correspondant a une autre date sans avoir a le gérer en tant que date)
Par contre pour tes applis qui n'apparaissent pas dans ajout/suppression de programmes, tu as 9 chances sur 10 de pouvoir quand même les retrouver dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall
Tout ca se gere tres bien avec
RegRead ( "keyname", "valuename" )
Petit détail, Acrobat reader dont tu parles est tout a fait capable de gérer cela par lui même (utilise l'Adobe Customization Wizzard).
Solution pour tester la présence d'un logiciel :
Lors de l'installation tu lui fais créer une clé de registre. Perso, je fais créer dans
HKLM\SOFTWARES\[NOM de la société]\[Nom de l'application]
les valeurs :
Version=[Version]
Date_Install=[Date de l'installation]
Ca te permet de tester si l'appli est présente et si a la date de l'installation c'est bien la version qui est en prod qui a été installée, et pas une version en préprod, ou au contraire une qui avait été retirée parceque trop vieille.
Par exemple
HKLM\SOFTWARES\ForumAutoItFrancais\AcrobatReader
Version=9.0.0.0
Date_Install=20101201
(le fait de noter la date AAAAMMJJ permet de comparer directement le chiffre obtenu avec un autre correspondant a une autre date sans avoir a le gérer en tant que date)
Par contre pour tes applis qui n'apparaissent pas dans ajout/suppression de programmes, tu as 9 chances sur 10 de pouvoir quand même les retrouver dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall
Tout ca se gere tres bien avec
RegRead ( "keyname", "valuename" )
Petit détail, Acrobat reader dont tu parles est tout a fait capable de gérer cela par lui même (utilise l'Adobe Customization Wizzard).
Si vis pacem para bellum
Re: [..] Installation logiciel avec test clé de registre
Merci pour cette reponse mais comment fais tu pour verifier la cle de registre ? ma question est la?
as tu un exemple stp? ( si elle existe et bien tu n'install pas le soft)
as tu un exemple stp? ( si elle existe et bien tu n'install pas le soft)
- Jerome
- Niveau 9

- Messages : 661
- Enregistré le : mar. 07 avr. 2009 08:35
- Localisation : Picardie
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
Coucou,
Tu peux récupérer la valeur de la clé de registre et la comparer avec la version que tu veux installer.
Si elle est différente, alors tu install.
Jérôme
Tu peux récupérer la valeur de la clé de registre et la comparer avec la version que tu veux installer.
Si elle est différente, alors tu install.
Jérôme
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
La commande c'est regread (cf un peu plus haut, je t'ai filé la syntaxe, sinon, y a l'aide d'autoit) et pour savoir si elle existe, bin, y a la commande If... then... else...opium a écrit :Merci pour cette reponse mais comment fais tu pour verifier la cle de registre ? ma question est la?
as tu un exemple stp? ( si elle existe et bien tu n'install pas le soft)
Code : Tout sélectionner
$Installer = False
$VersionAInstaller = "12.8.2.0" ; j'ai mis ce numero au pif, a adapter pour chaque appli
$AppliPresente = RegRead("HKLM\SOFTWARES\ForumAutoItFrancais\AcrobatReader", "Version") ; j'ai mis "ForumAutoItFrancais\AcrobatReader" au pif, a toi de mettre le nom de ta boite (ou ce que tu veux) et le nom de l'appli concernée
If $AppliPresente = "" Then
$Installer = True
Else
$AncienneVersion = StringSplit($AppliPresente, ".")
$NouvelleVersion = StringSplit($VersionAInstaller, ".")
For $i = 1 To 4
If $NouvelleVersion[$i] > $AncienneVersion[$i] Then
$Installer = True
EndIf
Next
EndIf
If $Installer = True Then
;~ la ligne de commande pour installer ton appli
Else
MsgBox(0, "", "Une version plus récente est déjà installée")
EndIfSi vis pacem para bellum
Re: [..] Installation logiciel avec test clé de registre
Merci ,merci et merci pour cette solution trop cool.....
je test et si probleme je reviens
ET MERCI !!!!
je test et si probleme je reviens
ET MERCI !!!!
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
...
Et si pas de pb et que ca resoud le pb, bin faut revenir aussi pour mettre le topic en [R]

Et si pas de pb et que ca resoud le pb, bin faut revenir aussi pour mettre le topic en [R]
Si vis pacem para bellum
- sksbir
- Niveau 7

- Messages : 384
- Enregistré le : lun. 26 oct. 2009 17:57
- Localisation : Lyon
- Status : Hors ligne
Re: [..] installation logiciel avec test cle de registre
zeshrek a écrit :En tant que packageur je suis régulièrement confronté a ce genre de probleme dans le cadre de mon travail.
Solution pour tester la présence d'un logiciel :
Lors de l'installation tu lui fais créer une clé de registre. Perso, je fais créer dans
HKLM\SOFTWARES\[NOM de la société]\[Nom de l'application]
les valeurs :
Version=[Version]
Date_Install=[Date de l'installation]
Ca te permet de tester si l'appli est présente et si a la date de l'installation c'est bien la version qui est en prod qui a été installée, et pas une version en préprod, ou au contraire une qui avait été retirée parceque trop vieille.
Par exemple
HKLM\SOFTWARES\ForumAutoItFrancais\AcrobatReader
Version=9.0.0.0
Date_Install=20101201
(le fait de noter la date AAAAMMJJ permet de comparer directement le chiffre obtenu avec un autre correspondant a une autre date sans avoir a le gérer en tant que date)
Par contre pour tes applis qui n'apparaissent pas dans ajout/suppression de programmes, tu as 9 chances sur 10 de pouvoir quand même les retrouver dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall
Tout ca se gere tres bien avec
RegRead ( "keyname", "valuename" )
Petit détail, Acrobat reader dont tu parles est tout a fait capable de gérer cela par lui même (utilise l'Adobe Customization Wizzard).
Perso, j'éviterais de créer des informations externes à ce que tu essayes d'installer.
On trouve effectivement une partie dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall, mais il en existe une autre dans HKCU\SOFTWARES\Microsoft\Windows\current version\uninstall, quand le soft est installé selon une stratégie par utilisateur.
Pour les softs compatibles MSI, je conseille très fortement l'utilisation de l'objet "WindowsInstaller.Installer"
Voici le code source de mon programme autoit utilisé pour faire l'inventaire, et décider à partir de là ce qu'il faut installer/désintaller :
► Afficher le texte
Re: [..] Installation logiciel avec test clé de registre
Bonjour
Pour ma part j'utilise
Le plus contraignant est de trouver la bonne valeur dans la base de registre mais après c'est assez simple à mettre en place.
Je l'utilise comme script de connexion à un domaine pour maintenir à jour tout une série de logiciel.
Pour ma part j'utilise
Code : Tout sélectionner
$var=''
$var = regread ("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt , "Version")
If $var <>3.3.6.1 Then
SplashTextOn("", "Mises à jour en cours de autoIt Merci de Patienter" , -1, -1, -1, -1, 3, "", 16)
installAutoIt()
SplashOff()
EndIf
Func installAutoIt()
RunWait(\\Monserveur\partage\autoit.exe)
Je l'utilise comme script de connexion à un domaine pour maintenir à jour tout une série de logiciel.
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
Disons qu'apres une dizaine d'années a faire ce métier, je me suis rendu compte d'une chose, c'est que comme bien des domaines, si tu veux que les choses soient bien faites, fais les toi même !sksbir a écrit :Perso, j'éviterais de créer des informations externes à ce que tu essayes d'installer.
On trouve effectivement une partie dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall, mais il en existe une autre dans HKCU\SOFTWARES\Microsoft\Windows\current version\uninstall, quand le soft est installé selon une stratégie par utilisateur.
Les logiciels d'inventaire de parc logiciel se basent généralement sur des signatures de fichiers obtenues en scannant le disque dut des postes de travail plutot que sur des clés de registre pour détecter si tel ou tel logiciel est installé ou non.
Il y a des quantités astronomiques de logiciels qui ne déposent pas de clé dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall
Donc si tu veux avoir un inventaire propre, bin quand tu installes un soft, tu poses ta clé, quand tu montes de version tu la modifie, et quand tu le désinstalle tu la retire. C'est tout simple, c'est intégrable dans a peu pres tout type de script utilisé (wise script, innstallshield script, msi, vbs, autoit...) pour faire des packages logiciels, et dans les outils de déploiement (LDMS, SMS/SCCM, Altiris, et même Marimba ou Enteo !) et surtout c'est fiable.
Si vis pacem para bellum
- sksbir
- Niveau 7

- Messages : 384
- Enregistré le : lun. 26 oct. 2009 17:57
- Localisation : Lyon
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
@zeshrek : La solution d'écrire soit même des clés d'inventaire est tentante, mais je persiste à la déconseiller : quid des logiciels installés "à la sauvage" par les utilisateurs ? Ils n'auront pas la clé registre, donc seront considérés comme non installés par ton inventaire personnalisé.
Par ailleurs, nombre de logiciels fournissent quand même un return code égal à zéro quand ils s'installent mal. Dans ce cas, ta clé registre s'inscrit, et le logiciel est considéré comme installé... dommage..
Ceci dit, je suis d'accord avec toi en ce qui concerne les logiciels d'inventaire. C'est pour ça que j'ai mon script qui effectue l'inventaire, et il est très rapide car je n'inventorie que ce qui m'intéresse:
j'utilise donc la routine basée sur l'objet WindowsInstaller.Installer, et pour les programmes que je dois déployer et qui ne sont pas MSI, je rajoute dans mon petit script d'inventaire ce qu'il faut pour les détecter : Soit la recherche de la clé dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall (mais alors uniquement la clé qui m'intéresse hein..), et même dans les cas extrêmes, le test de la présence d'un fichier qui fait partie du logiciel déployé.
J'écris tout ça dans mon petit fichier INI d'inventaire, et l'outil d'installation l'utilise pour déterminer ce qu'il faut faire.
Mais je préfère passer un peu de temps à rétroanalyser l'installation d'un nouveau logiciel pour détecter comment il s'installe ( et exploiter ça pour mon inventaire) , plutôt que d'écrire une clé registre à coté pour notifier l'installation.
Par ailleurs, nombre de logiciels fournissent quand même un return code égal à zéro quand ils s'installent mal. Dans ce cas, ta clé registre s'inscrit, et le logiciel est considéré comme installé... dommage..
Ceci dit, je suis d'accord avec toi en ce qui concerne les logiciels d'inventaire. C'est pour ça que j'ai mon script qui effectue l'inventaire, et il est très rapide car je n'inventorie que ce qui m'intéresse:
j'utilise donc la routine basée sur l'objet WindowsInstaller.Installer, et pour les programmes que je dois déployer et qui ne sont pas MSI, je rajoute dans mon petit script d'inventaire ce qu'il faut pour les détecter : Soit la recherche de la clé dans HKLM\SOFTWARES\Microsoft\Windows\current version\uninstall (mais alors uniquement la clé qui m'intéresse hein..), et même dans les cas extrêmes, le test de la présence d'un fichier qui fait partie du logiciel déployé.
J'écris tout ça dans mon petit fichier INI d'inventaire, et l'outil d'installation l'utilise pour déterminer ce qu'il faut faire.
Mais je préfère passer un peu de temps à rétroanalyser l'installation d'un nouveau logiciel pour détecter comment il s'installe ( et exploiter ça pour mon inventaire) , plutôt que d'écrire une clé registre à coté pour notifier l'installation.
- zeshrek
- Niveau 10

- Messages : 984
- Enregistré le : mer. 17 nov. 2010 09:31
- Localisation : Sur ma chaise
- Status : Hors ligne
Re: [..] Installation logiciel avec test clé de registre
Je comprend ton approche sksbir, mais ma methode est le fruit de mon experience. Je veux pas dire que je suis experimenté et toi non, juste que d'apres ce que j'ai vécu, c'est cette methode qui est appropriée. Si je me retrouve a intervenir dans un autre contexte, je réviserai sans doute ma position pour m'adapter.
Pour ce qui est des installations "a la sauvage" par les utilisateurs, ma réaction est simple : y en a pas.
Un utilisateur a les droits 'user' pas 'admin' donc il installe rien ! Laisser les utilisateurs installer ce qu'ils veulent est le premier pas vers le foutoir total. Ils bossent avec les outils qu'on leur donne et si ca suffit pas, ils demandent, le logiciel demandé est approuvé ou non, et si approuvé, il est packagé, puis installé par les gens dont c'est le métier.
Le coup de la clé de rgistre qui s'inscrit malgré le fail... tu es de mauvaise foi là non ?
Si l'install se fait dans un MSI alors le rollback d'échec la désinscrit.
Si tu as fait un script (par ex en autoit) rien ne t'empeche de tster le code de retour (y'm'semble bien que runwait fait ca tres bien) avant de claquer ta clé...
Pour les inventaires, perso, je suis pas tres fabna de ce qui existe, mais je dois faire avec. Si je devais faire moi meme un outil d'inventaire, ca serait un petit script qui tourne sur les postes des utilisateurs, qui scanne HKLM\SOFTWARES\[NOM de la société]\
Ca impose une contrainte (minime) a celui qui package de créer ce jeu de clés, mais ca remonte un inventaire sur... (a condition de ne pas laisser les utilisateurs installer quoi que ce soit...)
Pour ce qui est des installations "a la sauvage" par les utilisateurs, ma réaction est simple : y en a pas.
Un utilisateur a les droits 'user' pas 'admin' donc il installe rien ! Laisser les utilisateurs installer ce qu'ils veulent est le premier pas vers le foutoir total. Ils bossent avec les outils qu'on leur donne et si ca suffit pas, ils demandent, le logiciel demandé est approuvé ou non, et si approuvé, il est packagé, puis installé par les gens dont c'est le métier.
Le coup de la clé de rgistre qui s'inscrit malgré le fail... tu es de mauvaise foi là non ?
Si l'install se fait dans un MSI alors le rollback d'échec la désinscrit.
Si tu as fait un script (par ex en autoit) rien ne t'empeche de tster le code de retour (y'm'semble bien que runwait fait ca tres bien) avant de claquer ta clé...
Pour les inventaires, perso, je suis pas tres fabna de ce qui existe, mais je dois faire avec. Si je devais faire moi meme un outil d'inventaire, ca serait un petit script qui tourne sur les postes des utilisateurs, qui scanne HKLM\SOFTWARES\[NOM de la société]\
Ca impose une contrainte (minime) a celui qui package de créer ce jeu de clés, mais ca remonte un inventaire sur... (a condition de ne pas laisser les utilisateurs installer quoi que ce soit...)
Si vis pacem para bellum
Re: [..] Installation logiciel avec test clé de registre
Bonjour,
Il me semble qu'il y a un bug dans le code extrait ci-dessous. Avec les valeurs suivantes :
$AppliPresente = 3.3.6.1
$VersionAInstaller = 3.3.4.3
le code retourne qu'il faut installer la version 3.3.4.3 alors que la version présente 3.3.6.1 est plus récente.
J'espère que je n'arrive pas trop tard 
Il me semble qu'il y a un bug dans le code extrait ci-dessous. Avec les valeurs suivantes :
$AppliPresente = 3.3.6.1
$VersionAInstaller = 3.3.4.3
le code retourne qu'il faut installer la version 3.3.4.3 alors que la version présente 3.3.6.1 est plus récente.
Je propose une correction :zeshrek a écrit :Code : Tout sélectionner
; [...] $AncienneVersion = StringSplit($AppliPresente, ".") $NouvelleVersion = StringSplit($VersionAInstaller, ".") For $i = 1 To 4 If $NouvelleVersion[$i] > $AncienneVersion[$i] Then $Installer = True EndIf Next
Code : Tout sélectionner
#include <Math.au3>
; [...]
$AncienneVersion = StringSplit($AppliPresente, ".")
$NouvelleVersion = StringSplit($VersionAInstaller, ".")
$i = 1
While $NouvelleVersion[$i] == $AncienneVersion[$i] and $i < _Min($NouvelleVersion[0], $AncienneVersion[0])
$i +=1
WEnd
$Installer = ($NouvelleVersion[$i] > $AncienneVersion[$i] or ($NouvelleVersion[$i] == $AncienneVersion[$i] and $NouvelleVersion[0] > $AncienneVersion[0]))


