CRÉATION D'UN FICHIER AUTOEXTRACTIBLE

Utilisateur anonyme - 29 oct. 2006 à 21:35
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 6 mars 2011 à 12:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40123-creation-d-un-fichier-autoextractible

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
6 mars 2011 à 12:21
Salut,

Ça me rappelle une source en vb6 que j'avais fait basé sur le même principe. En ce qui concerne la compression effectivement le mieux serait d'ouvrir la liste des fichiers à inclure, les injecter dans un stream, puis compresser ce stream en GZip via le io.compression dispo dans le framework et d'injecter celui-ci en fin d'exécutable, de cette façon l'autoextractible n'aura aucune dépendance, c'est bien le but d'ailleurs!

Aussi, il serrait de la même façon possible de mettre le fichier XML en fin d'exécutable juste après le stream compressé. Il faudrait alors mettre un marqueur entre les deux fichier pour récupérer l'offset de début du XML.
Le xml contiendrait bien sûr l'offset de début et la taille du flux compressé et la liste des offset/length des fichiers une fois le flux décompressé.

Voila, sinon j'ai quand même une petite question qui s'adresse aux plus calés d'entre nous. J'ai besoins d'utiliser cette méthode et je ne souhaite pas opter pour quelque chose d'autre genre IExpress par exemple car j'ai des besoins perso (dossier temporaire, options...). J'avais donc essayé il n'y a pas longtemps (avant de voir cette source) de reproduire ce schéma mais je ne savais pas si c'était possible en .Net. J'ai alors tenté une appli de teste pour écrire en fin d'exe mais mon antivirus s'est affolé direct (avira).
Je m'aperçois que ce n'est pas le cas avec ton application. Ma question est donc la suivante: Un exécutable a-t-il une terminaison précise ? Un caractère ou un marqueur particulier ? Ou encore doit-elle avoir son nombre d'octet multiple de X ?

Merci à ceux qui pourront m'éclairer car je dois réaliser une appli que je dois distribuer et je n'aimerais pas avoir des retours de tout le monde en me disant "c'est un virus ton truc". Ça la fout mal ^^
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
13 janv. 2008 à 18:58
Merci et content que ce code t'es apporté un plus. Petite précision : il n'y a aucune compression mais si tu veux utlise Bzip qui est inclus dans le framework donc tout pret à l'emploi!
BIGDAMSBIG Messages postés 27 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 25 février 2008
13 janv. 2008 à 04:10
bonjour 2YVES

un peu prise de tete car je suis débutant et je ne serais dire que ce n'est autre que de la precision de
haute voltige commencant a peine a comprendre ton programme au bout de 2 semaines vus à mes instants perdus.

au moins toutes mes questions obcsures sur ton programmes
m'auront apportées une parcelle de connaissance à mon ignorance.

les commentaires sur ton code sont d'ailleurs
trés enrichissants.

je devrais me taire car je suis un non initié
mais je tiens a dire que ton code reste captivant.

car qui ne voudrait rendre auto extracible
plusieur fichiers avec le plaisir de ne pas passer
par un compresseur tout fait.le zip fait mieux certes
mais cela n'est pas non plus ton objectif majeur.

c'est du bon. pour la compression ya mieux
mais la trame est la.

-je sais maintenant plus que rien.

-de rien

merci tout de meme...
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
17 déc. 2007 à 18:03
De rien
cs_ricco Messages postés 12 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 13 juin 2010
15 déc. 2007 à 17:39
Parfait ta démarche m'a permis d'avancer sur mon programme de découpe de gros fichiers. Merci pour ton aide
Claude
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
7 sept. 2007 à 21:10
Bonjour,
Ca fait longtemps que j'ai fais cette source. Je me rends compte qu'un fichier Xml de dépendance n'est pas terrible mais je ne reprendrais pas cette source même si elle mérite que je la recode sans fichier Xml.
En gros j'ai créé deux projets. Le premier pour la restauration et le second pour la sauvegarde. Le premier à l'éxcution examine le fichier Xml (créé par le second projet). Celui ci contient les offsets des fichiers enregistrés. Il se place en position dans son propore fichier pour extraire les données. Le second projet enregistre le premier projet compiler de .dat (je l'ai renommé comme ca mais c'est un executable) en .exe et écris à la suite les fichiers voulus. Evidemment la premier offset est connus puisqu'il sagit de la longeur du fichier projet de restauration. J'éspère avoir été clair sinon j'essairai de détailler.
cs_ricco Messages postés 12 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 13 juin 2010
7 sept. 2007 à 16:44
Bonjour
Ta démarche m'intéresse et je voudrais savoir comment tu as crée le fichier Exe qui te sert d modèle. Par avance je te remercie de ta réponse
Claude
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
7 nov. 2006 à 16:32
je viens de tester plus sérieusement, bon l'erreur est signalée par boite de dialogue... mais bon ok.
ce qui manque surtout à ce source c'est une bonne compression...
mais bon l'idée est très bien !
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
7 nov. 2006 à 16:23
c'est mieux en ce qui concerne la vitesse.

question : dans le cas où un fichier est utilisé et qu'on essai de le sauvegarder... il se passe koi ? il est ignoré sans log ?
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
6 nov. 2006 à 17:16
Désolé je montre juste comment faire un autoextractible, autoextractible ca ne veut pas dire forcement fichier compréssé...
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 nov. 2006 à 12:59
Bonjour,

C'est toi qui t'occupe de la (dé)compression (algo perso)?
Si c'est le cas, pourquoi ne pas utiliser 7Zip ?
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
4 nov. 2006 à 16:13
J'ajoute par la même occasion que l'utilisation du processeur tourne autour de 10% contre 100 avant ;)
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
4 nov. 2006 à 16:10
Bon finalement j'ai optimisé le code car c'est vrai que la vitesse était vraiment longue..
Voici les améliorations :
Vitesse d'écriture, Choix du répertoire d'extraction, Vitesse passe de 10Ko/sec à 30Mo/Sec (chez moi..), Fichiers intacts à l'extraction
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
31 oct. 2006 à 16:24
Ceci est un exemple pour montrer comment créer un fichier autoextractible, je ne cherche pas à faire une application performante mais à montrer un principe. Je n'optimiserai pas ce code pour l'instant.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
31 oct. 2006 à 12:12
Bonjour,

Le principe à l'air bien mais qu'est-ce que c'est lent... et ça bouffe énormément de processeur... (avec les timers...)

Bref bien mais à optimiser sérieusement...
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
30 oct. 2006 à 08:52
C'est corrigé
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
30 oct. 2006 à 08:26
Je vais corriger ca.
Utilisateur anonyme
29 oct. 2006 à 23:23
Si je confirme.
Avec qu'un fichier txt dans l'archive, j'ai au début "abcdef" et à la fin "abcdef ".
Un fichier de 6 octets fini en fichier de 16 octets bizzard non ?
Bon j'ai regardé un peu le code et en effet, tu fait une lecture de 16 octets par 16 octets.
Donc si la taille du fichier n'est pas un multiple de 16. Ca rajoute des octets.
Pourquoi faire le transfert par paquets de 16 octets ?
__________
Kenji
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
29 oct. 2006 à 23:06
Je viens de tester un fichier Txt et je le retrouve comme avant, je me demande comment tu en es arrivé là?
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
29 oct. 2006 à 23:04
Ah bon, je n'ai pas ce genre d'erreurs et heuresement sinon les fichiers executables extraits ne pourraient pas s'ouvrir or ce n'est pas le cas...
Le code est ok la dessus d'ailleurs.
Utilisateur anonyme
29 oct. 2006 à 21:35
Merci de supprimer les dossiers "bin" et "obj" qui prenne de la place et qui nous sont inutiles.

Sinon, bah, je n'ai pas trop regardé le code.
Y'a de l'idée, mais pourquoi ne pas pouvoir choisir le dossier d'extraction ? Ca évitera de se trainer un xml non ?

Sinon, plus grave.
C'a marche pas tout à fait très bien. Ca modifie la fin des fichiers à l'extraction
Exemple, j'ai pris un fichier "toto.txt" ou j'ai écris "abcdef"
Après empaquetage et réextraction, j'ouvre mon fichier "toto.txt" et je trouve dedans "abcdef4, 654, C". Donc ce n'est pas au point tout ca.
A corriger.

Bonne prog
__________
Kenji
Rejoignez-nous