Table des Matières
1 Introduction
La solution de gestion des stations du Gip Recia est essentiellement basée sur les vservers wksapps et netboot.
Elle contient un ensemble d’outils permettant le clonage, la sauvegarde et la restauration d’un poste ( Unattended ) et un outil de déploiement de paquets logiciels ( WPKG )
WPKG est un outil de déploiement automatisé de logiciels. Le site de ce projet est WPKG
2 Qu’y a-t-il sur le vserver wksapps ?
Le serveur wksapps contient un certain nombre de partages SMB.
- \\wksapps\wpkg$ : c’est le partage qui contient l’installation proprement dite de wpkg. On ne devrait pas avoir à intervenir ici, sauf pour éventuellement changer la configuration ( config.xml ) et la version de wpkg.js
- \\wksapps\antivirus :c’est le partage contenant le programme d’installation de Kaspersky. Là, encore, on ne devrait pas intervenir dessus. On peut simplement vouloir éventuellement forcer l’installation de l’agent kaspersky pour un nouveau poste entrant dans le domaine en tapant en console : \\wksapps\antivirus\kasperskyNA\lsexec.exe /S
- \\wksapps\install : ce partage contient tous les répertoires, scripts, drivers nécessaire pour une installation automatisée d’un poste par Unattended.
- \\wksapps\clonage$ A compléter
- \\wksapps\sauvegarde$ A compléter
La partie qui nous intéresse dans cette documentation est l’utilisation de wpkg, pour installer des logiciels de façon automatique sur les clients.
3 Quelques informations sur WPKG.
La plupart des informations utiles se trouve sur le site de wpkg , http://wpkg.org
En résumé, l’essentiel de wpkg se trouve dans le script wpkg.js.
C’est un script que n’importe quel client windows possédant cscript (http://jc.bellamy.free.fr/fr/vbsgeneralites.html ) peut supporter. (A voir pour 98 ?)
Et l’essentiel des informations sur les paquets, les hôtes et les profils se trouve dans des fichiers xml éditables avec n’importe quel éditeur ( mais scite est vraiment très bien ! )
Attention : Ceci n’est pas vrai si l’on utilise le front-end web de wpkg qui a pour rôle de générer « à la volée » les fichiers xml nécessaires à wpkg.js
- Lorsqu’un client fait appel au script wpkg.js,
-
-
wpkg.js analyse le(s) fichier(s) packages.xml ( ou les xml se trouvant dans le dossier packages ) et vérifie la cohérence des instructions d’installation qu’il y trouve.
-
wpkg.js analyse le fichier profiles.xml ( ou les xml se trouvant dans le dossier profils ) qui associe les paquets logiciels au profil.
-
- wpkg.js analyse le nom du client, vérifie qu’il fait partie des clients qu’il gère par la lecture du fichier hosts.xml, et si c’est le cas lui attribue un profil de logiciels.
-
- Dès lors wpkg.js vérifie sur le client le fichier c:\windows\system32\wpkg.xml et le compare aux paquets qu’il doit installer.
- Si un nouveau paquet est apparu, il exécute les instructions contenues dans ce paquet et si l’installation est un succès, il ajoute dans le fichier c:\windows\system32\wpkg.xml le nouveau package.xml qu’il vient d’installer. Il y a donc une trace sur le client des paquets installés.
- Si un paquet a changé de version, wpkg effectue la désinstallation de l’ancienne version, puis l’installation de la nouvelle.
- Si un paquet a disparu du profil, wpkg effectue un upgrade ( pour être sûr que l’installation est conforme) à l’aide des instructions qui ont été stockées précédemment dans c:\windows\system32\wpkg.xml puis applique l’instruction de désinstallation de c:\windows\system32\wpkg.xml. Si la désinstallation s’est bien passée, le fichier c:windowssystem32wpkg.xml est mis à jour.
-
4 Utiliser WPKG_Web
WPKG web permet de s’affranchir de l’écriture des fichiers xml. Les informations entrées dans WPKG_web sont stockées dans une base de données MySQL et les fichiers xml sont générés à la volée lorsque wpkg les demande.
Pour y accéder, http://wksapps/wpkg_web/
4.1 L’interface de WPKG_Web
- Sur le menu de gauche, vous trouvez 3 entrées :
-
- Packages
- Hosts
- Profiles
4.2 Les limitations de WPKG_Web
- Les limitations de WPKG_web sont à l’heure actuelle les suivantes :
-
-
Cette interface n’est plus développée et ne suit pas les évolutions de wpkg qui change pourtant beaucoup ( D’ailleurs, ils cherchent un développeur ) http://wpkg.org/TODO_list#WPKG_web_interface
-
- La fonctionnalité téléchargement ne marche pas pour le moment.
-
- car la version 1.0.2 de wpkg ne le supporte pas (celle installée par défaut )
- que si on passe en 1.1.0_M6 ( la dernière ), il n’y a pas compatibilité … ( Réponse de Rainer Meier, un des développeurs de wpkg )
- reste à tester en 0.9.xx … Mais est-ce utile ?
-
Pas de retour sur l’interface de l’installation sur les clients ( pas de logs quoi ! )
-
Une convivialité toute relative quand on est à l’aise avec les xml… ( beaucoup de clics…)
-
Et un gros souci : on ne peut pas importer les xml directement, ce qui ne nous permettra pas d’échanger des xml entre établissements.
-
En fait, j’ai modifié wpkg_web… Voir en fin de document.
5 L’installation côté client
Pour lancer wpkg sur le client, il y a plusieurs solutions : un service installable nommé WPKG-Client, le passage d’une ligne de commande dans le script de logon ou éventuellement un autoit.
5.1 Utilisation du service WPKG-Client
5.1.1 Dans le cas de l’utilisation de Netboot
Dans la version qui nous arrive, l’utilisation de netboot installe automatiquement le client wpkg dans une version un peu datée. ( 0.9.x )
Ceci est à revoir
5.1.2 Sur des postes déjà installés
5.1.2.1 Installation manuelle
Sur un poste, en admin, télécharger et installer WPKG-Client ( version 1.3.6 à l’heure où j’écris ces lignes )
Le configurer à l’aide de « http://wpkg.org/WPKG_Client_-_GUI_help »
Pour la configuration, quelques instructions :
- Entrer \\wksapps\wpkg$\wpkg.js dans la boite WPKG Path
- Comme Parametres, j’ai choisi /synchronize /debug ( synchronize est obligatoire, debug permet d’obtenir un retour dans un fichier, on peut préférer quiet et nonotify ) Pour les options possibles, le plus simple est de regarder le fichier config.xml dans \\wksapps\wpkg$\ qui est très documenté. Une autre option très utile est /sendStatus qui permet au client wpkg d’afficher ce qu’il est en train de faire.
- Pour accéder au partage, il faut un compte … Chez nous, on utilise le compte d’un prof. Entrer L0XXXXXXX\compte-prof où L0XXXXXXX est le nom de votre domaine. Entrer le mot de passe de ce compte.
- WPKG supporte les variables, il faut donc les définir. Dans l’onglet variables, ajouter software pour \\wksapps\install\packages ( Attention, pas d’antislash à la fin du chemin !) et wpkg pour \\wksapps\wpkg$
- Dans cet onglet, on peut envisager de lancer des actions avant et/ou après. C’est une fonctionnalité que nous n’utilisons pas pour le moment.
- Ne sachant pas trop à quoi ca sert pour le moment, j’ai coché la case Show …
- Dans l’onglet Logon Settings, on choisit quand le service s’exécute. Pour notre part, nous avons choisi à l’extinction, et laisser un délai de 120 minutes. Cela peut sembler long, mais c’est pour garantir que les logiciels ait du temps. En outre, si l’installation se termine avant, l’ordinateur s’éteint.
- On peut configurer les messages diffusés par le service. Nous avons choisi : « WPKG installe des applications… » et « Merci d’attendre, ne pas éteindre ni redémarrer cet ordinateur… »
- Nous n’avons pas touché aux autres onglets.
- Vérifier que tout se passe bien en cliquant sur Test Settings.
- Si c’est le cas, faire un export de cette configuration qui servira pour l’installation silencieuse.
5.1.2.2 Installation automatique et silencieuse
Pour installer silencieusement le client sur les postes :
-
Le msi du client ( version 1.3.6 ) est dans \\ctrlr\netlogon\bin, ainsi que le fichier de configuration du client setting.xml précédemment exporté.
-
Dans le local.exe en AutoIt lancé par le local.bat, nous avons ajouté les lignes suivantes ( Ce fichier est lancé avec une élévation de pouvoir ( voir http://forums.giprecia.fr/viewtopic.php?id=391 et de nombreux autres posts de Jacques Thomas sur le forum ).
$PartageReseau="\\ctrlr\netlogon\bin" If Not DriveMapAdd( "", $PartageReseau ,0 ) Then sleep(200) If Not DriveMapAdd("", $PartageReseau ,0) Then Exit EndIf EndIf #cs Installation de wpkg-client #ce ; Si le service est lancé, on le tue If ProcessExists("WPKGSrv.exe") then ProcessClose("WPKGSrv.exe") EndIf ; Si le client n'est pas déjà installé, on le fait, sinon, on met à jour les settings If Not FileExists( @ProgramFilesDir & "\wpkg\WPKGSrv.exe" ) Then $cmd=@ComSpec & " /c " & ' start /wait msiexec /qb /i ' & $Partage RunWait( $cmd , @SystemDir ,@SW_HIDE ) Else $cmd=@ComSpec & ' /c "'&@ProgramFilesDir&'\wpkg\wpkginst.exe" --SETTINGSFILE='& $PartageReseau &'\settings.xml' RunWait( $cmd, @SystemDir ,@SW_HIDE ) EndIf ;On démarre le service Run( @ComSpec & ' /c net start "WPKG Service"', @SystemDir , @SW_HIDE )
5.2 Lancement par le script de logon
On peut dans un logon.bat (pour les localadmin et les domainadmins par exemple ) envisager de lancer wpkg par cette suite de commandes
@echo off net use \\wksapps\wpkg$ set SOFTWARE=\\wksapps\install\packages set WPKG=\\wksapps\wpkg$ cscript \\wksapps\wpkg$\wpkg.js /synchronize /nonotify net use \\wksapps\wpkg$ /delete
Mais c’est à mon avis à éviter, car fastidieux pour les utilisateurs, en cas d’installation lourde et/ou longue.
5.3 Lancement par le script de logon
On peut aussi envisager de lancer les mêmes commandes dans un autoit avec élévation de pouvoir à la façon de Jacques et Eric du lycée Jacques Coeur.
5.4 Notre choix : poweroff
Notre choix s’est porté sur l’utilisation du client WPKG-Client conjointement à l’utilisation de PowerOff
Depuis quelques mois, nous avons installé sur nos postes un logiciel d’extinction automatique des postes : PowerOff
PowerOff est lui-même un service qui nous donne toute satisfaction.
- Notre démarche est donc la suivante :
-
-
Initialement ( sur une durée de 8 jours environ), nous avons installé le service PowerOff par un script AutoIt, nommée local.exe qui contient les commandes suivantes:
#cs Installation de poweroff #ce $PartageReseau="\\ctrlr\netlogon\bin" $minutes= Random ( 0 , 59 , 1 ) $cmd1=@ComSpec &" /c " & $PartageReseau & '\poweroff\poweroff.exe shutdown -warn -warntime 60 \ -msg "Ce PC sera éteint dans 60 secondes\n Sauver votre travail !" -scheduled \ -time 19:'& $minutes &'-days m,t,w,th,f,s,su -create_service -notray' $cmd2=@ComSpec & " /c " & @SystemDir &'\poweroff.exe shutdown -warn -warntime 60 \ -msg "Ce PC sera éteint dans 60 secondes\n Sauver votre travail !" -scheduled \ -time 19:'& $minutes &' -days m,t,w,th,f,s,su -create_service -notray' if fileexists( @systemdir & "\poweroff.exe") then $cmd=$cmd2 Else $cmd=$cmd1 EndIf If ProcessExists("poweroff.exe") Then RunWait( @ComSpec & " /c " & ' net stop Poweroff' , @SystemDir,@SW_HIDE ) EndIf RunWait( $cmd , @SystemDir,@SW_HIDE ) RunWait( @ComSpec & " /c " & ' net start Poweroff' , @SystemDir,@SW_HIDE )
-
Ainsi PowerOff éteint automatiquement les machines le soir à une heure comprise aléatoire comprise entre 19h00 et 19h59. L’objectif étant que les machines ne s’éteignent pas toutes en même temps et ne demande pas toutes l’installation de logiciels au même moment. ( Préservation de la bande passante en cas d’installation de « gros » logiciels.
-
Toujours par le script local.exe en AutoIt, nous avons installé le client WPKG afin qu’il installe les logiciels à l’extinction.
-
Voici notre settings.xml:
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <file>\\10.145.15.178\wpkg$\wpkg.js</file> <path-user>L0451462V\omer</path-user> <path-password>dsbhBoQ=</path-password> <exec-user>SYSTEM</exec-user> <exec-password /> <parameters>/synchronize /debug /sendStatus</parameters> <silent>YES</silent> <pre-action /> <post-action /> <show-GUI>YES</show-GUI> <logon-delay>2</logon-delay> <logon-message-title>WPKG Software Deployment</logon-message-title> <logon-message-1>WPKG installe des applications...</logon-message-1> <logon-message-2>Merci d'attendre, ne pas éteindre ni redémarrer cet ordinateur...</logon-message-2> <script-variable name="software">\\10.145.15.178\install\packages</script-variable> <script-variable name="wpkg">\\10.145.15.178\wpkg$</script-variable> <priority>normal</priority> <stop-service-after-done>NO</stop-service-after-done> <laptop-mode>NO</laptop-mode> <server-connecting-method>standard</server-connecting-method> <server-connecting-ip /> <server-connecting-timeout>3</server-connecting-timeout> <server-connecting-script-timeout>3</server-connecting-script-timeout> <server-connecting-script-file /> <log-file /> <run-on-shutdown>YES</run-on-shutdown> <shutdown-delay>30</shutdown-delay> </configuration>
-
6 L’écriture de paquets logiciels
6.1 Avec WPKG_Web
L’écriture d’un paquet est assez intuitive avec WPKG_Web
Il suffit de cliquer sur le lien Add New
Ensuite, il faut remplir tous les onglets.
Une remarque, il faut avoir nommé le paquet ( et validé ) dans le premier onglet avant de pouvoir accéder aux autres.
6.2 Par import dans WPKG_Web
Si les modifications de wpkg_web ont été faites comme décrit à la fin de ce document.
Vous pouvez insérer un fichier xml en cliquant sur import xml
Attention : Après l’import, vérifier que tout est OK ! Notamment la balise <conflicts> n’est pas traitée et la logique de check reste toujours à AND !
6.3 Un exemple : Installation du codec Xvid
Le plus simple étant de prendre un exemple, allons y !
-
Chercher le logiciel http://www.koepi.info/Xvid-1.2.1-04122008.exe et le télécharger dans l’emplacement choisi \\wksapps\install\packages\xvid.
-
Vérifier dans les sources de paquets chez wpkg.org si le paquet a déjà été proposé : ici, c’est le cas : http://wpkg.org/Xvidcodecs , mais c’est une vieille version.
-
Importer le paquet fourni par le site.
-
Retourner sur la liste des paquets, puis sur le nouveau paquet xvidcodec
-
- Repasser par tous les onglets pour adapter. Ici :
-
-
J’ai changé le nom pour xvid, et la priorité pour 5
-
Un peu au hasard, j’ai changé l’entrée de check en Xvid 1.2.1 ( mais si le check est faux c’est plutôt mieux pour le moment )
-
Dans l’onglet Commande, j’adapte. Je remplace « %packages% » par « %software%xvid » et j’adapte le nom du fichier à lancer. Les lignes d’install et d’upgrade deviennent donc
%software%\xvid\Xvid-1.2.1-04122008.exe /VERYSILENT
-
-
Le paquet est adapté.
-
Aller dans les profils et ajouter le paquet xvid dans le profil test.
-
Se jeter sur la machine de test sur laquelle on ajoute le petit script launch-wpkg.cmd suivant qui permet de tester
@echo off net use \\wksapps\wpkg$ set SOFTWARE=\\wksapps\install\packages set wpkg=\\wksapps\wpkg$ cscript \\wksapps\wpkg$\wpkg.js /synchronize /debug notepad c:\windows\system32\wpkg.xml net use \\wksapps\wpkg$ /delete
-
Lancer ce script en scrutant ses résultats.
-
Si vous avez suivi à la lettre jusqu’ici, l’installation fonctionne, mais la vérification est fausse. Vérifier donc dans Ajout/Suppression de programmes.
-
Constater que l’entrée dans Ajout/Suppression de programmes s’appelle « Xvid 1.2.1 final uninstall », donc le paquet n’a pas été considéré comme installé. Corriger donc l’entrée Check dans le paquet.
-
- En regardant ce qui s’est installé, on constate qu’un groupe de programme Xvid est apparu, or je préfère que ce groupe de programme se place dans Accessoires, ajouter donc les commandes suivantes :
-
-
Pour l’install et l’upgrade,
%COMSPEC% /C move "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Xvid" "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Accessoires"
-
Pour le remove,
%COMSPEC% /C rmdir /S /Q "%ALLUSERSPROFILE%\Menu Démarrer\Programmes\Accessoires\Xvid"
-
-
J’en profite pour vérifier la commande de désinstallation en la copiant dans une fenêtre de commande. Elle fonctionne et on retrouve donc notre ordinateur sans Xvid
-
Je relance le script launch-wpkg.cmd. L’installation s’est bien passée et le paquet est inscrit dans le fichier C:\Windows\System32\wpkg.xml .
-
Pour vérifier le remove, j’enlève le paquet Xvid du profil de Test. Et je relance le script launch-wpkg.cmd. La désinstallation se passe bien.
-
Reste à vérifier que l’upgrade se passe bien … Pour cela, j’installe une version précédente http://download.divxmovies.com/XviD-1.1.3-27042008.exe, je remet Xvid dans le profil Test. Et je relance le script launch-wpkg.cmd.
6.4 Le déboggage
6.4.1 Tester le paquet
Quand on a écrit un paquet logiciel, il faut le tester !
Pour cela, si vous utilisez le client, la solution est de se déconnecter et de se reconnecter… La difficulté est que cela est bien long, qu’il faut configurer le client pour qu’il passe en mode debug … Donc très fastidieux.
- Donc le plus simple est de procéder ainsi :
-
-
Répérer le nom de la machine de test
-
Créer ou modifier un profil test (par exemple) qui contient tous les paquets déjà installés et le paquet que vous êtes en train d’écrire.
-
Si vous êtes admin, créer un petit fichier batch, launch-wpkg.bat par exemple contenant ceci
net use \\wksapps\wpkg$ set SOFTWARE=\\wksapps\install\packages set WPKG=\\wksapps\wpkg$ cscript \\wksapps\wpkg$\wpkg.js /synchronize /debug notepad c:\windows\system32\wpkg.xml net use \\wksapps\wpkg$ /delete
-
La deuxième ligne permet de définir une variable %SOFTWARE% ( si vos paquets l’utilise, mais c’est très très conseillé ! )
-
La quatrième ligne lance wpkg en mode debug… Dans la fenêtre, vous verrez donc défiler toutes les instructions que wpkg lance
-
La cinquième permet de voir la sortie locale ( et aussi de bloquer la fenêtre de script pour repérer ce qui n’aurait pas marché.
-
La sixième déconnecte le lecteur réseau. C’est indispensable si vous utilisez le client wpkg qui n’aime pas que la connexion soit déjà ouverte !
-
6.4.2 Sources d’erreurs
Les commandes suivantes sont des ‘built-in’ commandes du shell de windows:
ASSOC BREAK CALL CD CHCP CHDIR CLS COLOR COPY DEL DISKCOMP DISKCOPY ENDLOCAL ERASE EXIT FOR FORMAT FTYPE GOTO GRAFTABL IF MD MODE MOVE PATH PAUSE POPD PROMPT PUSHD RD REM REN SET SETLOCAL SHIFT START TIME TITLE TREE TYPE VER VERIFY VOL
On doit donc les précéder de ‘%COMSPEC% /c’ pour qu’elles soient interprétées
Exemple
%COMSPEC% /c copy x:\path\go.lnk "%ALLUSERSPROFILE%\Desktop"
Pour la copie, on peut préférer ‘xcopy’ qui peut être appelé directement
xcopy x:\path\go.lnk "%ALLUSERSPROFILE%\Desktop"
7 Améliorations de WPKG_web tel qu’il nous arrive dans wksapps
7.1 Modification de versions
J’ai changé le wpkg.js pour la version 1.1.0_M6 ( réputée bêta, mais en fait plutôt stable )
Le wpkg client qui nous arrive est très vieux aussi, j’ai changé pour la version 1.3.6. Là encore, c’est une bêta (qui marche plutôt bien )
7.2 Ajout de la fonction import de paquets xml ( Doit être fait en root sur wksapps, donc par la télémaintenance )
-
Il manque une dépendance perl dans wksapps : XML::DOM. Il faut faire faire par la télémaintenance un apt-get install libxml-dom-perl sur wksapps.
-
Il faut renseigner le Connect.pm dans /var/www/wpkg_web/scripts/ pour se connecter à la base unattended ( normalement fait par modulr )
-
Dans /var/www/wpkg_web, ajouter un dossier import avec des droits en control total pour www_data
-
Il faut ajouter cette ligne en début du script perl package_xml_in
BEGIN {push @INC,"/var/www/wpkg_web/scripts/"; }
Déjà fait, mais sans le begin et j’ai l’impression que c’est mieux avec … (?)
-
Dans sidebar.php, ajouter (<a href=’package_in.php’>Import Xml</a>) le lien d’import
-
Ajouter le fichier package_in.php suivant
<?php include "connect.php"; include "header.php"; if (isset($_POST['submit'])) { if (file_exists('import/erreur.txt')){unlink('import/erreur.txt');} $Saved_File = fopen('import/packxml.txt', 'wb'); fwrite($Saved_File, stripslashes(utf8_encode($_POST['notes' ]))); fclose($Saved_File); exec('perl /var/www/wpkg_web-1.1.0/scripts/packages_xml_in /var/www/wpkg_web-1.1.0/import/packxml.txt 1>import/ok.txt 2>import/erreur.txt'); unlink('import/packxml.txt'); //echo 'Passage par le submit'; } ?> <script type="text/javascript"> // Tool Tip Data below var preFormat="<div class='tip'>"; var postFormat="</div>"; var permDel="<span style=\"background: red; font-weight: bold;color: white;\"><?php print $vocab['tip-permdel']; ?>"; </script> <title><?php print $vocab['title-packimport']; ?></title> <div id="popupDiv" style="visibility:hidden; position:absolute; z-index:1000;"> </div> <form action=<?php echo basename(__FILE__); ?> method="post"> <table class='tbl_main' > <?php include "sidebar.php"; ?> <td valign='top' > <table class='tbl_mainsub'> <tr class='headline'> <td> <?php print $vocab['title-packimport']; ?> <br> <?php print $vocab['gen-pastehere']; ?> </td> </tr> </table> <table class='tbl_sub2' cellspacing='0' cellpadding='2'> <tr align='center'> <td> <textarea id='notes' name='notes' rows='20' cols='80'><?php //print_r($_POST); //Affiche tout le contenu de la variable $_GET if (file_exists('import/erreur.txt')) {if (file_get_contents('import/erreur.txt')!=NULL) {echo 'Erreur a l\'import La sortie du script est :'.file_get_contents('import/erreur.txt'); } else { if (isset($_POST['submit'])) {echo 'Import OK Vérifiez dans la liste des paquets';} } unlink('import/erreur.txt'); } if (isset($_POST['submit'])==FALSE){print $vocab['gen-pastehere'];} //print $vocab['gen-pastehere']; ?></textarea> </td> </tr> <tr> <td align='center'> <input type='submit' name='submit' value='<?php print $vocab['button-submit']; ?>' > </td> </tr> </table> </td> </table> </form> <?php include "footer.php"; ?> </body> </html>
-
Dans header.php, ajouter une balise meta pour forcer l’utf8 (mais je ne comprends pas le codage dans la base … )
L’import est fonctionnel, mais il y a 2 petits bugs sur le script perl package_xml_in
Bugs constatés :
-
La balise <conflicts> n’est pas traitée et la logique de check reste toujours à AND, même si dans le paquet, elle est à OR ou autre.
-
Sur les check, il y a eu des évolutions de wpkg.js avec des valeurs différentes.
Changes 2007-04-05, v1.1.0-M3 by Rainer Meier <skybeam (at) users.sourceforge.net> NEW: Package uninstall checks have been extended. The following values are now valid: type="uninstall" path="prg" condition="versionsmallerthan" value="1.1" Check if version is smaller than the specified value type="uninstall" path="prg" condition="versionlessorequal" value="1.1" Check if version is less or equal than the specified value type="uninstall" path="prg" condition="versionequalto" value="1.1" Check if version is exactly equal to the specified value type="uninstall" path="prg" condition="versiongreaterorequal" value="1.1" Check if version is greater or equal to the specified value type="uninstall" path="prg" condition="versiongreaterthan" value="1.1" Check if version is greater than the specified value The version is compared to the DisplayVersion value within the uninstall entry within the Windows registry. Changes are based on a patch by Richard de Vos. Thanks! NEW: Added new check type: "execute". This allows you to execute any script which checks if an application is installed - based on the exit code of the script. Usage: type="execute" path="\\path\to\script.cmd" condition="exitcodesmallerthan" value="0" Evaluates true if the exit code is negative type="execute" path="\\path\to\script.cmd" condition="exitcodelessorequal" value="0" Evalueates true if exit code is 0 or negative type="execute" path="\\path\to\script.cmd" condition="exitcodeequalto" value="0" Evaluates true only if exit code is exactly 0 type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterorequal" value="0" Evaluates true if exit code is 0 or any poitive number type="execute" path="\\path\to\script.cmd" condition="exitcodegreaterthan" value="0" Evaluates true if exit code is any positive number This type of check also allows very complex checks. For example there is a limitation of the RegRead method used by WPKG to query registry values which contain backslashes '\'. Now you can execute a batch script which checks for such registry values using 'reg query ...'.
7.3 Ajout de la fonction téléchargement
Il suffit de modifier le fichier packages_xml_out.php de la manière suivante :
Remplacer ligne 81
print sprintf(" <download lang='%s' url='%s' saveto='%s' />\n", $dl_data[0], $dl_data[1], $dl_data[2]);
par
print sprintf(" <download url='%s' target='%s' />\n", $dl_data[1], $dl_data[2]);
C’est un peu « faible » comme modification, mais ça marche.
Par contre, un paquet qui contient un téléchargement ne sera pas correctement réimporté. Il faudrait changer complètement la gestion des téléchargements dans wpkg_web, les scripts et la base de données ( notamment virer la langue et modifier « saveto » en « target »
Attention, ce n’est pas un téléchargement permanent ! Le principe est download, execute, delete.
C’est curieux, mais c’est ainsi qu’il est implanté dans wpkg.js 1.1.0_M6