[UDF] 7-Zip avec Dll x32 et x64
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.
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonjour,
Petit déterrage de topic mais udf que je commence à utiliser intensivement et voici un problème que je rencontre:
la fonction _7ZipAdd ne fonctionne pas lorsqu'on lui demande d'ajouter à l'archive un fichier contenant le caractère "°" (symbole degré).
la fonction ne retourne pas d'erreur et n'ajoute pas le fichier à l'archive (le problème semble venir de la dll).
pour le moment je contourne le problème simplement en supprimant ce caractère du nom des fichiers mais si cela pouvait être corrigé ça serait top
Sinon avant j’utilisais l'udf _Zip.au3 de wraithdu mais je le trouve moins stable que 7Zip.au3 .
Dans tous les cas merci pour ce travail
Petit déterrage de topic mais udf que je commence à utiliser intensivement et voici un problème que je rencontre:
la fonction _7ZipAdd ne fonctionne pas lorsqu'on lui demande d'ajouter à l'archive un fichier contenant le caractère "°" (symbole degré).
la fonction ne retourne pas d'erreur et n'ajoute pas le fichier à l'archive (le problème semble venir de la dll).
pour le moment je contourne le problème simplement en supprimant ce caractère du nom des fichiers mais si cela pouvait être corrigé ça serait top
Sinon avant j’utilisais l'udf _Zip.au3 de wraithdu mais je le trouve moins stable que 7Zip.au3 .
Dans tous les cas merci pour ce travail
- walkson
- Modérateur
- Messages : 1032
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonjour,
C'est vrai que ça date "2008". Je n'ai pas testé l'UDf mais je sais que l'on peut en command line créer une archive.
Il suffit de télécharger à cette adresse http://www.7-zip.org/a/7z1514-extra.7z (7-Zip Extra: standalone console version) et de récupérer 7za.exe.
Ce programme fonctionne seul sans DLL ou installation. Après, il suffit de faire par exemple
Le signe degré ne pose pas de problème
Voilà le détail des CL
ps: il y a eu une MAJ en décembre 2015
C'est vrai que ça date "2008". Je n'ai pas testé l'UDf mais je sais que l'on peut en command line créer une archive.
Il suffit de télécharger à cette adresse http://www.7-zip.org/a/7z1514-extra.7z (7-Zip Extra: standalone console version) et de récupérer 7za.exe.
Ce programme fonctionne seul sans DLL ou installation. Après, il suffit de faire par exemple
ShellExecute("7za.exe","a ARC.7z C:\Users\Pc\Desktop\Alpha°")
Le signe degré ne pose pas de problème
Voilà le détail des CL
► Afficher le texte
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonjour walkson,
merci, je vais suivre ton conseil.
merci, je vais suivre ton conseil.
Re: [UDF] 7-Zip avec Dll x32 et x64
Je viens de lire tous les postes, ainsi que l'udf d'exemple pour une chose que je veux faire mais je n'y arrive pas...
Au passage, merci Tlem pour ce partage, car c'est un UDF génial ! ! ! ^^
Donc, je me doute que c'est là dedans que j'ai réponse mais je ne vois vraiment pas.
Tout se dézippe correctement, mais mon archive à plusieurs dossiers, et tout se dézippe dans le même dossier !
J'ai vu qu'un membre avait le même souci et Tlem a dit d'aller voir dans le code plus haut.
Donc, je pense que dans les options, il faut que je mette 0 ou 1 après les virgules, mais comment je sais à quoi cela correspond ?
Ex :
Je suis sûr que c'est simple, mais là je capte pas...
Merci d'avance
Cdt
Au passage, merci Tlem pour ce partage, car c'est un UDF génial ! ! ! ^^
Code : Tout sélectionner
;Example 2
$ArcFile = FileOpenDialog("Select archive", "", "Archive Files (*.7z;*.zip;*.gzip;*.bzip2;*.tar)")
If @error Then Exit
$Output = FileSelectFolder("Select output folder", "")
If @error Then Exit
$sExclude = "*.bmp"
$retResult = _7ZIPExtractEx(0, $ArcFile, $Output, 0, 1, 1, 0, 0, 0, $sExclude)
If @error = 0 Then
MsgBox(64, "_7ZIPExtractEx", $retResult)
Else
MsgBox(16, "_7ZIPExtractEx", "Error occurred")
EndIf
Donc, je me doute que c'est là dedans que j'ai réponse mais je ne vois vraiment pas.
Code : Tout sélectionner
_7ZIPExtract(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\")
J'ai vu qu'un membre avait le même souci et Tlem a dit d'aller voir dans le code plus haut.
Donc, je pense que dans les options, il faut que je mette 0 ou 1 après les virgules, mais comment je sais à quoi cela correspond ?
Ex :
Code : Tout sélectionner
_7ZIPExtract(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",0,1)
Merci d'avance
Cdt
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonsoir, a vu de nez, je dirait qu'il faut utiliser l'option $sRecurse.; #FUNCTION# ====================================================================================================================
; Name...........: _7ZIPExtract
; Description ...: Extracts files from archive to the current directory or to the output directory
; Syntax.........: _7ZIPExtract($hWnd, $sArcName[, $sOutput = 0[, $sHide = 0[, $sOverwrite = 0[, $sRecurse = 1[, _
; $sIncludeArc[, $sExcludeArc[, $sIncludeFile = 0[, $sExcludeFile = 0[, $sPassword = 0[, _
; $sYes = 0]]]]]]]]]])
; Parameters ....: $hWnd - Handle to parent or owner window
; $sArcName - Archive file name
; $sOutput - Output directory
; $sHide - Use this switch if you want the CallBack function to be called
; $sOverwrite - Overwrite mode: 0 - Overwrite All existing files without prompt, _
; 1 - Skip extracting of existing files, _
; 2 - Auto rename extracting file, _
; 3 - auto rename existing file
; $sRecurse - Recursion method: 0 - Disable recursion
; 1 - Enable recursion
; 2 - Enable recursion only for wildcard names
; $sIncludeArc - Include archive filenames
; $sExcludeArc - Exclude archive filenames
; $sIncludeFile - Include filenames, specifies filenames and wildcards or list file that specify processed files
; $sExcludeFile - Exclude filenames, specifies what filenames or (and) wildcards must be excluded from operation
; $sPassword - Specifies password
; $Yes - assume Yes on all queries
;
; Return values .: Success - Returns the string with results
; Failure - Returns 0 and and sets @error
; @Error - 0 = No error.
; |1 = Function failed
; |2 = Dll not started
;
; Author ........: R. Gilman (rasim)
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
Merci beaucoup Tlem mais, apparemment cela ne fonctionne pas...
Je mets bien 1 sur avant la fin de la parenthèse (ce qui correspond à la recursive) et pourtant il m'extrait tout dans le meme dossier, à la différence que j'ai plein de dossier vide en plus !
Je rate un truc mais quoi ?
J'ai lu les autres options, mais je ne vois rien qui m'indique d'extraire les dossiers tel qu'ils sont compressés.
Je suis sur que je vais passer pour un âne quand je vais voir la solution, mais c'est toujours quand c'est sous son nez que l'on ne voit rien...
Code : Tout sélectionner
_7ZIPExtract(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",1,0,1)
Je rate un truc mais quoi ?
J'ai lu les autres options, mais je ne vois rien qui m'indique d'extraire les dossiers tel qu'ils sont compressés.
Je suis sur que je vais passer pour un âne quand je vais voir la solution, mais c'est toujours quand c'est sous son nez que l'on ne voit rien...
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Re: [UDF] 7-Zip avec Dll x32 et x64
Après avoir pris un peu de recul, je viens de comprendre (enfin j'espère...) que c'est le premier nombre qui détermine les dossiers d'extraction comme dans le zip
Le souci est que quand je lance mon code, et que je clique sur le bouton installer, le logiciel ne répond plus...
Code : Tout sélectionner
_7ZIPExtract(1, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",1,0,1)
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonjour sydnaysyd,
Je n'ai pour l'instant pas de temps pour regarder ça de près.
Par contre je peux vous dire que le "premier nombre" ne sert pas à ce que vous croyez. Il s'agit du handle retourné par la fonction 7zipStartup ou un nom de ce genre (je suis sur le smartphone, donc pas accès à la liste des fonctions).
Vous devriez jeter un coup d'œil sur les exemples de L'UDF. Il me semble qu'il y a un exemple avec la récursion.
Bonne recherche.
Edit : Au cas où... Prenez bien L'UDF sur le lien que je donne vers le forum US et non L'UDF joint au premier message (qui ne sert que d'archive).
Envoyé de mon SM-N9005 en utilisant Tapatalk
Je n'ai pour l'instant pas de temps pour regarder ça de près.
Par contre je peux vous dire que le "premier nombre" ne sert pas à ce que vous croyez. Il s'agit du handle retourné par la fonction 7zipStartup ou un nom de ce genre (je suis sur le smartphone, donc pas accès à la liste des fonctions).
Vous devriez jeter un coup d'œil sur les exemples de L'UDF. Il me semble qu'il y a un exemple avec la récursion.
Bonne recherche.
Edit : Au cas où... Prenez bien L'UDF sur le lien que je donne vers le forum US et non L'UDF joint au premier message (qui ne sert que d'archive).
Envoyé de mon SM-N9005 en utilisant Tapatalk
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
Merci Tlem de ce retour, j'ai cherché sur le forum autoit mais je n'ai rien trouvé et les liens de l'udf original sont HS...
Je pense avoir compris les options et dans quel sens les mettre
[0, dossier d'origine de l'archive, dossier de sortie de l'archive dezippée, on cache ou pas l'extraction, on ecrase ou pas, on fait la recursivité ou non, on inclue les archives, on exclue les archives, on inclue les fichiers, on exclue les fichiers, on met un mot de passe, on repond oui a tout] (je fais simple lol)
donc je pense ne pas me tromper en mettant cela, mais en fait il me mets qu'il y a une errreur à l'extraction de l'archive...
Je ne vois pas ce que rate...
Je pense avoir compris les options et dans quel sens les mettre
[0, dossier d'origine de l'archive, dossier de sortie de l'archive dezippée, on cache ou pas l'extraction, on ecrase ou pas, on fait la recursivité ou non, on inclue les archives, on exclue les archives, on inclue les fichiers, on exclue les fichiers, on met un mot de passe, on repond oui a tout] (je fais simple lol)
Code : Tout sélectionner
_7ZIPExtract(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",0,0,2,1,1,0,0,0)
Je ne vois pas ce que rate...
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Re: [UDF] 7-Zip avec Dll x32 et x64
Je continue au fur et à mesure, et je me rend qu'il me l'erreur au moment où je valide la récursivité dans le code !
Donc, je ne vois pas pourquoi, il refuse de faire la recursivité, en plus j'ai bien mis les dll là où se trouve le code... Le poste est en 64Bits en W7, je ne pense pas que cela peut bloquer...
Code : Tout sélectionner
_7ZIPExtract(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",1,0,1,1)
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonsoir Sydneysyd.
J'ai trouvé d’où vient le problème ...
Et il est inutile de me demander à quoi sert l'option "Recurse" de la première fonction. ^^
J'ai trouvé d’où vient le problème ...
; Name...........: _7ZIPExtract
; Description ...: Extracts files from archive to the current directory or to the output directory
; Name...........: _7ZIPExtractEx
; Description ...: Extracts files from archive with full paths to the current directory or to the output directory
Et il est inutile de me demander à quoi sert l'option "Recurse" de la première fonction. ^^
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
Merci Tlem
Donc si je comprends bien, je ne peux pas extraire l'archive tel qu'elle est zippée ?
Donc si je comprends bien, je ne peux pas extraire l'archive tel qu'elle est zippée ?
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Heuuu non vous ne comprenez pas bien.
Relisez mon message plusieurs fois. ^^
Envoyé de mon SM-N9005 en utilisant Tapatalk
Relisez mon message plusieurs fois. ^^
Envoyé de mon SM-N9005 en utilisant Tapatalk
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
J'ai vraiment du mal...
Donc tous les dossiers sont extraits dans le même dossier ?
Quelle commande je fais pour que cela sorte comme dans le zip ?
Donc tous les dossiers sont extraits dans le même dossier ?
Quelle commande je fais pour que cela sorte comme dans le zip ?
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Je confirme !
_7ZIPExtractEx
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
Un grand MERCI Tlem !
L'extraction se fait correctement
Je pense changer mon pseudo pour 'Le boulet' lol
Merci encore
Code : Tout sélectionner
_7ZIPExtractEx(0, @tempdir & "\EasyCloud\GoogleChrome.7z", @ProgramFilesDir & "\GoogleChrome\",1,0,1,0)
Je pense changer mon pseudo pour 'Le boulet' lol
Merci encore
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Tlem
- Site Admin
- Messages : 11782
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
C'est super, votre projet avance ...
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é".
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é".
Re: [UDF] 7-Zip avec Dll x32 et x64
lol, oui, je pense que par rapport au fait que je ne peux pas avoir un exe classique depuis mon poste, la solution de portabilisation n'est pas si mal :
- Installation plus rapide
- Paramètres déjà mis
- Installation plus rapide
- Paramètres déjà mis
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
- Elementary
- Niveau 1
- Messages : 4
- Enregistré le : lun. 13 nov. 2017 10:07
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Bonjour toutes et tous !
Tout d'abord merci pour cet UDF très pratique.
Je vais toutefois soulever un problème du code dans la fonction _7ZipStartup() :
Si l'OS est en 32 bits pas de problème, la bonne DLL est utilisée, mais lorsque l'OS est en 64 bits et que le programme est en 32 bits le code ne permet pas de charger la bonne DLL et on a une erreur à l'exécution. Je propose donc de remplacer , ce qui donne :
Il s'agit donc de regarder vers quelle bibliothèque système pointe le programme lors de son exécution. De cette manière le fonctionnement est correct aussi bien sur les plateformes 32 bits que sur les 64 bits.
[note du 14-11-2017] : une modification avait déjà été proposée sur autoitscript.com par Mugen : [Fin de note]
Autre petit problème lorsqu'on ajoute un élément dans le fichier compressé dès lors qu'un mot de passe d'encryptage est utilisé.
Dans le code de la fonction _7ZipAdd on trouve ceci :
Or cette commande ne fonctionne pas en dehors du codage 7Z et TAR, cela créé une erreur.
Ainsi pour le fichier ZIP cette commande ne doit pas être utilisée.
Je propose donc une modification du code de cette manière :
J'ai rajouté des guillemets pour le password afin de tenir compte des caractères spéciaux éventuels qu'il contiendrait.
Je ne suis arrivé encore à aucune solution sur les autres formats : GZIP, BZIP2.
Mais je ne désespère pas. Je vous laisse donc du travail en perspective !
Bonne continuation à vous toutes et tous.
Tout d'abord merci pour cet UDF très pratique.
Je vais toutefois soulever un problème du code dans la fonction _7ZipStartup() :
Func _7ZipStartup()
If Not @Compiled Then ; If not compiled, test and open the right dll
If Not FileExists($sNoCompiledPath & $sZip32Dll) And _
Not FileExists($sNoCompiledPath & $sZip64Dll) Then Return SetError(2, 0, 0)
If @OSArch = "X86" Then
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip32Dll) ; Open x32 dll from no compiled path
Else
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip64Dll) ; Open x64 dll from no compiled path
EndIf
Else ; If compiled, test and open the right dll (that must be in ScriptDir for compiling)
If @OSArch = "X86" Then
If Not FileInstall("7-zip32.dll", $sCompiledPath & $sZip32Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip32Dll) ; Open x32 dll from FileInstall path
Else
If Not FileInstall("7-zip64.dll", $sCompiledPath & $sZip64Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip64Dll) ; Open x64 dll from FileInstall path
EndIf
EndIf
If $hDLL_7ZIP = -1 Then Return SetError(1, 0, 0) ; If no dll handle, return error
Return 1
EndFunc ;==>_7ZipStartup
If Not @Compiled Then ; If not compiled, test and open the right dll
If Not FileExists($sNoCompiledPath & $sZip32Dll) And _
Not FileExists($sNoCompiledPath & $sZip64Dll) Then Return SetError(2, 0, 0)
If @OSArch = "X86" Then
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip32Dll) ; Open x32 dll from no compiled path
Else
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip64Dll) ; Open x64 dll from no compiled path
EndIf
Else ; If compiled, test and open the right dll (that must be in ScriptDir for compiling)
If @OSArch = "X86" Then
If Not FileInstall("7-zip32.dll", $sCompiledPath & $sZip32Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip32Dll) ; Open x32 dll from FileInstall path
Else
If Not FileInstall("7-zip64.dll", $sCompiledPath & $sZip64Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip64Dll) ; Open x64 dll from FileInstall path
EndIf
EndIf
If $hDLL_7ZIP = -1 Then Return SetError(1, 0, 0) ; If no dll handle, return error
Return 1
EndFunc ;==>_7ZipStartup
par
Func _7ZipStartup()
If Not @Compiled Then ; If not compiled, test and open the right dll
If Not FileExists($sNoCompiledPath & $sZip32Dll) And _
Not FileExists($sNoCompiledPath & $sZip64Dll) Then Return SetError(2, 0, 0)
If @OSArch = "X86" Or StringInStr(@SystemDir,"SysWOW64") Then
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip32Dll) ; Open x32 dll from no compiled path
Else
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip64Dll) ; Open x64 dll from no compiled path
EndIf
Else ; If compiled, test and open the right dll (that must be in ScriptDir for compiling)
If @OSArch = "X86" Or StringInStr(@SystemDir,"SysWOW64") Then
If Not FileInstall("7-zip32.dll", $sCompiledPath & $sZip32Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip32Dll) ; Open x32 dll from FileInstall path
Else
If Not FileInstall("7-zip64.dll", $sCompiledPath & $sZip64Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip64Dll) ; Open x64 dll from FileInstall path
EndIf
EndIf
If $hDLL_7ZIP = -1 Then Return SetError(1, 0, 0) ; If no dll handle, return error
Return 1
EndFunc ;==>_7ZipStartup
If Not @Compiled Then ; If not compiled, test and open the right dll
If Not FileExists($sNoCompiledPath & $sZip32Dll) And _
Not FileExists($sNoCompiledPath & $sZip64Dll) Then Return SetError(2, 0, 0)
If @OSArch = "X86" Or StringInStr(@SystemDir,"SysWOW64") Then
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip32Dll) ; Open x32 dll from no compiled path
Else
$hDLL_7ZIP = DllOpen($sNoCompiledPath & $sZip64Dll) ; Open x64 dll from no compiled path
EndIf
Else ; If compiled, test and open the right dll (that must be in ScriptDir for compiling)
If @OSArch = "X86" Or StringInStr(@SystemDir,"SysWOW64") Then
If Not FileInstall("7-zip32.dll", $sCompiledPath & $sZip32Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip32Dll) ; Open x32 dll from FileInstall path
Else
If Not FileInstall("7-zip64.dll", $sCompiledPath & $sZip64Dll, 1) Then Return SetError(3, 0, 0)
$hDLL_7ZIP = DllOpen($sCompiledPath & $sZip64Dll) ; Open x64 dll from FileInstall path
EndIf
EndIf
If $hDLL_7ZIP = -1 Then Return SetError(1, 0, 0) ; If no dll handle, return error
Return 1
EndFunc ;==>_7ZipStartup
[note du 14-11-2017] : une modification avait déjà été proposée sur autoitscript.com par Mugen : [Fin de note]
Autre petit problème lorsqu'on ajoute un élément dans le fichier compressé dès lors qu'un mot de passe d'encryptage est utilisé.
Dans le code de la fonction _7ZipAdd on trouve ceci :
on constatera la présence de la commande "-mhe" qui permet l'encodage du HEADER du fichier compressé afin de rendre impossible l'accès au listing du contenu avant la saisie du mot de passe.
Or cette commande ne fonctionne pas en dehors du codage 7Z et TAR, cela créé une erreur.
Ainsi pour le fichier ZIP cette commande ne doit pas être utilisée.
Je propose donc une modification du code de cette manière :
.......................
Local $Extention=StringSplit($sArcName,".")
Local $sCryptHeader=StringInStr("7Z|TAR",StringUpper($Extention[$Extention[0]]))
$sArcName = '"' & $sArcName & '"'
$sFileName = '"' & $sFileName & '"'
.......................
if $sPassword Then
$iSwitch &= ' -p"' & $sPassword& '"'
If $sCryptHeader Then $iSwitch &= ' -mhe'
EndIf
Local $Extention=StringSplit($sArcName,".")
Local $sCryptHeader=StringInStr("7Z|TAR",StringUpper($Extention[$Extention[0]]))
$sArcName = '"' & $sArcName & '"'
$sFileName = '"' & $sFileName & '"'
.......................
if $sPassword Then
$iSwitch &= ' -p"' & $sPassword& '"'
If $sCryptHeader Then $iSwitch &= ' -mhe'
EndIf
Je ne suis arrivé encore à aucune solution sur les autres formats : GZIP, BZIP2.
Mais je ne désespère pas. Je vous laisse donc du travail en perspective !
Bonne continuation à vous toutes et tous.
Modifié en dernier par Elementary le mar. 14 nov. 2017 18:54, modifié 3 fois.
Ne jamais remettre à demain ...... ce que l'on peut faire d'une seule ^^ !
- ricky
- Niveau 7
- Messages : 443
- Enregistré le : ven. 06 févr. 2009 09:25
- Localisation : Suisse
- Status : Hors ligne
Re: [UDF] 7-Zip avec Dll x32 et x64
Hello,
merci beaucoup pour ton udf et aux nouvelles corrections ci-dessus.
Petite question, les dll de 7zip sont des anciennes, peut-on utiliser les dernières sans avoir des soucis de compatibilité?
merci beaucoup pour ton udf et aux nouvelles corrections ci-dessus.
Petite question, les dll de 7zip sont des anciennes, peut-on utiliser les dernières sans avoir des soucis de compatibilité?