[..] Installation logiciel avec test clé de registre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
opium
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mer. 01 déc. 2010 15:11
Status : Hors ligne

[..] Installation logiciel avec test clé de registre

#1

Message par opium »

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
Avatar du membre
zeshrek
Niveau 10
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

#2

Message par zeshrek »

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).
Si vis pacem para bellum
opium
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mer. 01 déc. 2010 15:11
Status : Hors ligne

Re: [..] Installation logiciel avec test clé de registre

#3

Message par opium »

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)
Avatar du membre
Jerome
Niveau 9
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

#4

Message par Jerome »

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
Avatar du membre
zeshrek
Niveau 10
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

#5

Message par zeshrek »

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)
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...

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")
EndIf
Si vis pacem para bellum
opium
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mer. 01 déc. 2010 15:11
Status : Hors ligne

Re: [..] Installation logiciel avec test clé de registre

#6

Message par opium »

Merci ,merci et merci pour cette solution trop cool.....

je test et si probleme je reviens

ET MERCI !!!!
Avatar du membre
zeshrek
Niveau 10
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

#7

Message par zeshrek »

...
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
Avatar du membre
sksbir
Niveau 7
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

#8

Message par sksbir »

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
le programme lancé sans argument génère un fichier ini dans le répertoire temporaire. Sinon, accepte un nom de fichier en argument.
fredf19
Niveau 1
Niveau 1
Messages : 9
Enregistré le : jeu. 04 nov. 2010 09:17
Status : Hors ligne

Re: [..] Installation logiciel avec test clé de registre

#9

Message par fredf19 »

Bonjour
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)
    
 
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.
Avatar du membre
zeshrek
Niveau 10
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

#10

Message par zeshrek »

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.
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 !
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
Avatar du membre
sksbir
Niveau 7
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

#11

Message par sksbir »

@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.
Avatar du membre
zeshrek
Niveau 10
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

#12

Message par zeshrek »

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...)
Si vis pacem para bellum
vince59
Niveau 2
Niveau 2
Messages : 22
Enregistré le : dim. 09 janv. 2011 20:24
Status : Hors ligne

Re: [..] Installation logiciel avec test clé de registre

#13

Message par vince59 »

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.
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
 
Je propose une correction :

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]))
    
 
J'espère que je n'arrive pas trop tard :wink:
Répondre