[R] Désarchivage particulier et organisation du code

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

[R] Désarchivage particulier et organisation du code

#1

Message par foozoor »

Je viens de me mettre aujourd'hui à AutoIt et j'apprécie énormément ce qu'il peut faire sans trop se casser la tête.
Je ne suis pas développeur de métier, mais ce langage m'a donné envie d'explorer un peu cette piste.
J'ai encore pas mal de choses à apprendre et ce premier poste est là pour voir où j'en suis.

Voici mon tout premier code, comme vous pouvez le voir, il y a une partie qui me pose problème.

Code : Tout sélectionner

; Installation de MPC-HC

Const $title = "MPC-HC Install"
Const $url = "http://www.xvidvideo.ru/component/docman/doc_download/9064-media-player-classic-homecinema-x86-1634992-without-installer.html"
Const $filePath = @ScriptDir & "\mpc-hc.7z"


; Si HTPC\MPC-HC n'existe pas, on vérifie l'existence du dossier HTPC.
; Si HTPC n'existe pas, on crée les 2 dossiers.
; Sinon, on crée HTPC\MPC-HC.

#RequireAdmin
$dir1 = @ProgramFilesDir & "\HTPC"
$dir2 = @ProgramFilesDir & "\HTPC\MPC-HC"

If Not FileExists($dir2) Then
    If Not FileExists($dir1) Then
        DirCreate($dir1)
        DirCreate($dir2)
    Else
        DirCreate($dir2)
    EndIf
EndIf


; Télécharger MPC-HC s'il n'existe pas

If Not FileExists($filePath) Then
    InetGet($url, $filePath)
EndIf


; Désarchiver le contenu du dossier de l'archive dans le dossier HTPC\MPC-HC


; Suppression de l'archive

FileDelete($filePath);

; Confirmation

MsgBox(0, $title, "C'est fini !")
 
J'ai une archive .7z avec dedans, un dossier dont j'aimerais extraire le contenu dans un autre dossier.
Le problème étant que je ne peux/veux absolument pas me fier au nom du dossier.

[archive.7z] ; renommée lors du téléchargement
- [nom_du_dossier] ; j'aimerais extraire son contenu sans lui dire que le dossier s'appelle xmachintruc

Je ne vois que 2 solutions, dites-moi si c'est possible ou s'il y en a d'autres.
- Soit, extraire le contenu du dossier de l'archive, il n'y en a qu'un.
- Soit, utiliser une regex, j'ai cherché sur le web, ça donne un peu mal à la tête.

Je n'ai aucune idée de comment faire pour y parvenir, quel(s) fonction(s)/udf(s) utiliser ?

Cette deuxième solution sort un peu de ce que je veux faire, mais c'est la seule autre possibilité que je vois si la première est impossible.

N'hésitez pas à critiquer l'organisation de mon code, c'est vraiment un problème pour moi.
Est-il préférable de mettre toutes les variables au début ou seulement avant qu'elles soient utilisées ?
Je suppose que je peux placer #RequireAdmin ou bon me semble ou puis-je cibler la partie nécessitant Admin ?

Merci d'avance !
Modifié en dernier par foozoor le lun. 20 août 2012 16:44, modifié 2 fois.
Avatar du membre
Uranium
Niveau 5
Niveau 5
Messages : 143
Enregistré le : mer. 28 mars 2012 13:13
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#2

Message par Uranium »

Soit, extraire le contenu du dossier de l'archive, il n'y en a qu'un.
Il y a un UDF spécial , donc utilisez-le :wink:
Est-il préférable de mettre toutes les variables au début ou seulement avant qu'elles soient utilisées ?
Tout dépends , le mieux est de les déclarer au début , je trouve , mais les déclarer juste avant utilisation ne pose aucun problème.

Cordialement,
« En mathématiques, “évident” est le mot le plus dangereux. »
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#3

Message par mikell »

+1 pour l'udf

Code : Tout sélectionner

$dir1 = @ProgramFilesDir & "\HTPC"
$dir2 = @ProgramFilesDir & "\HTPC\MPC-HC"
If Not FileExists($dir2) Then
    If Not FileExists($dir1) Then
        DirCreate($dir1)
        DirCreate($dir2)
    Else
        DirCreate($dir2)
    EndIf
EndIf
C'est redondant, ça

Code : Tout sélectionner

$dir = @ProgramFilesDir & "\HTPC\MPC-HC\"
If Not FileExists($dir) Then DirCreate($dir)
c'est suffisant
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#4

Message par foozoor »

Code : Tout sélectionner

$dir = @ProgramFilesDir & "\HTPC\MPC-HC\"
If Not FileExists($dir) Then DirCreate($dir)
 
Merci c'est encore plus simple !
Donc il crée toute l'arborescence, est-il alors possible de créer plusieurs sous-dossiers ?
Comme ceci :

[HTPC]
- [MPC-HC]
- [FFDSHOW]
- [...]

J'ai juste une question pour l'udf, comment l'installer, j'ai une seule archive .zip avec 2 liens.
Est-ce normal ? Je pensais avoir un fichier .au3 qu'il suffisait d'inclure pour pouvoir l'utiliser.
Modifié en dernier par foozoor le lun. 20 août 2012 10:56, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#5

Message par mikell »

Hum, le lien n'est pas bon... essaie plutôt celui-là : 7Zip_UDF.zip
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#6

Message par foozoor »

Merci pour le lien !

J'ai un peu casqué pour comprendre qu'il fallait 7-zip32.dll au même endroit que le script utilisant l'UDF. :roll:
Une fois compilé, plus besoin du .dll. :D

La version de 7-Zip est un peu vieille (4.57), mais cela marche !

Bon je vais faire quelques tests et je vous dis quoi. :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#7

Message par Tlem »

mikell à voulu bien faire en vous donnant le lien direct, mais en fait il y à un sujet associé : http://www.autoitscript.fr/forum/viewto ... =21&t=1943
Tout y est expliqué. ;)

Quand à l'age de la DLL, cela importe peut, l'essentiel c'est que ça fonctionne. ;)
attention en cas d'OS 64Bits, car la DLL n'est qu'en 32Bits. Vous devrez donc compiler en 32 Bits. ;)

Je mettrait à jour le sujet et l'archive avec la version x64 plus tard ... :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

Re: [..] Désarchivage particulier et organisation du code

#8

Message par foozoor »

Bon quelle est la syntaxe à utiliser pour extraire un dossier et son contenu d'une archive .7z ? :?

Code : Tout sélectionner

#include <7Zip.au3>
$filePath = @ScriptDir & "\mpc-hc.7z"
$dest = "C:\Users\Admin\Desktop\HTPC\MPC-HC"
$folder = "\MPC-HC.1.6.3.4992.x86"
$result = _7ZIPExtractEx(0, $filePath, $dest) ; ne marche pas, je n'ai qu'un dossier vide 'mpc-hc'
 
J'ai désarchivé 'manuellement' mpc-hc puis je l'ai ré-archivé en .7z et là, le script marche.
C'est du à quoi ? Ancienneté du fichier 7-zip32.dll ?

Bon, j'arrête de vous ennuyer :wink: avec ceci, je vais regarder quelques scripts, tutoriels, vidéos pour m'améliorer.

Merci !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Désarchivage particulier et organisation du code

#9

Message par Tlem »

Effectivement, la décompression avec cette DLL semble poser un problème. Il vous reste donc deux autres solutions :
1 - Utiliser un autre UDF de décompression.
2 - Utiliser directement l'installateur en mode silencieux.

Pour le 1, vous trouverez sur le site US d'autres UDF qui pilote directement l’exécutable 7z. ;)
Pour le 2, je vous conseil ceci :

Code : Tout sélectionner

MPC-HC.1.6.3.4992.x86.exe /silent
; ou encore
MPC-HC.1.6.3.4992.x86.exe /verysilent

; Voir ici : http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html pour plus de détails
L'avantage, c'est qu'il n'y à plus besoin d'UDF et vous pouvez même y rajouter la gestion de la plateforme avant installation (x86 ou x64). ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

Re: [R] Désarchivage particulier et organisation du code

#10

Message par foozoor »

Vraiment sympa le lien ! :wink:

C'est vraiment plus simple à comprendre.

Code : Tout sélectionner

ShellExecute('MPC-HC.1.6.3.4992.x86.exe', '/verysilent /dir="C:\MPC-HC"', @ScriptDir)
 
Bon si je veux automatiser le download qui me pose problème (difficile de trouver des liens permanents pointant vers la dernière version de ses logiciels) faudra quand même que je dézippe (l'UDF fonctionne avec le .zip), je vais faire un tour sur le site US.

Donc si j'ai bien compris, tous les paramètres listés sont communs pour chaque exécutable utilisant InnoSetup ?
Maintenant comment savoir si un exécutable a été compilé par InnoSetup ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Désarchivage particulier et organisation du code

#11

Message par Tlem »

Afin d'automatiser le téléchargement, vous pouvez tout simplement analyser la page http://www.xvidvideo.ru/media-player-cl ... a-x86-x64/ afin de trouver le lien vers la dernière version.
Apparemment ce serait le premier lien du tableau. ;)

En ce qui concerne les paramètres, oui ils sont communs pour tous les exe compilés avec InnoSetup.
Et pour savoir si le setup à été compilé avec InnoSetup, hé bien, un clic de droite sur l'exe puis propriété et pour finir, onglet version ... :mrgreen:

Edit : Sinon, ce lien est peut être plus simple à analyser et les versions y sont plus récentes : http://mpc-hc.sourceforge.net/downloads/
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
foozoor
Niveau 4
Niveau 4
Messages : 54
Enregistré le : dim. 19 août 2012 17:41
Status : Hors ligne

Re: [R] Désarchivage particulier et organisation du code

#12

Message par foozoor »

Je n'ai jamais pensé aller voir sur sourceforge, la honte.

Et bien voilà pour mpc-hc, c'est fait ! :wink:
Le script final téléchargera et installera :
- MPC-HC
- FFDShow + .reg
- LAV Filters
- MadVR
Il copiera aussi mes fichiers de conf, pour un déploiement éclair. :wink:

J'espère y arriver pour demain afin de commencer la partie GUI.
Merci pour le support, si j'ai encore des problèmes, je créerai un autre topic, car là mon titre n'est plus vraiment adéquat !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Désarchivage particulier et organisation du code

#13

Message par Tlem »

Bien que le sujet soit 'résolu', il subsiste le problème de la décompression de cette archive 7z qui ne fonctionne pas !!!
Cela est dut à la version de la DLL (v4.57) mais il est possible d'en charger une plus récente (v9.20) qui est plus grosse de 120-130 Ko à peut près ...
Voici le lien : http://www.csdinc.co.jp/archiver/lib/7- ... l#download

Prochainement, je vais essayer de mettre à jour l'archive avec cette nouvelle DLL ainsi qu'une version 64 bits compatible + la fonction de listage des fichiers de l'archive _7ZipGetFilesList() ainsi que le correctif proposé par jide ici. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre