[R] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

[R] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#1

Message par Boulanza »

Bonjour,
Quelqu'un connaîtrait-il un logiciel ou une solution qui permettrait de rassembler plusieurs fichiers à exécuter (exe, dll, dat, etc) au sein d'un même exécutable.
Je m’explique : Réunir/regrouper des fichiers dans une archive (box) sans avoir à faire d'installation ou a décompresser l'archive.
Merci d'avance.
Cordialement.
Modifié en dernier par Boulanza le dim. 21 juil. 2019 10:41, modifié 2 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#2

Message par jchd »

Windows donne nativement accès aux fichiers contenus dans une archive .zip
Sinon, un SFX (archive auto-extractible) conviendrait-il ? Voir Google.

A part ça, je ne vois pas comment accéder à un fichier dans une archive (compressée ou non) sans ouvrir l'archive d'une façon ou d'une autre.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#3

Message par Boulanza »

Tout d'abord merci pour votre réponse.
Je ne cherche pas à créer un installateur, ou une archive auto exécutable (zip) mais rassembler plusieurs fichiers (les fichiers de mon programme) dans une boite (box) exécutable (Équivalent à Iexpress de Windows ou Windev).
Cordialement.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#4

Message par walkson »

Bonjour,
Je ne sais pas si cela correspond à votre attente ?
https://www.autoitscript.com/forum/topi ... es-easily/
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#5

Message par Boulanza »

Merci walkson pour votre réponse. Ma demande va dans ce sens. Malheureusement les scripts du lien me laisse dans une confusion totale, je ne serrais pas cabale de décelé leurs fonctionnement correctement. Par contre c'est vraiment ingénieux tous ces script, ils méritent d'être décortiquées... C'est inédit. votre aide est la bienvenue.
Cordialement.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#6

Message par walkson »

Le code de Uez génère un script. Soit vous l'utilisez en include, soit par fonction comme dans le zip
(je passe par un zip car le code est trop long)
Les 2 premieres icons sont créées en "dur" puis chargées dans les GUICtrlCreateIcon() un peu comme fileinstalle()
la troisième est créée en mémoire puis montée sur un label. Méthode que j'utilise quand j'utilise des images dans une gui
Voila le principe de base
Comme l'explique Uez, on peut utiliser différents fichiers (image, son, texte et même des exe à redéployer) Parcourez le sujet car Uez donne beaucoup d'exemples et de solutions
Fichiers joints
ImagesBinaires.zip
(166.27 Kio) Téléchargé 326 fois
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#7

Message par Boulanza »

Merci pour votre aimable aide,
Effectivement, Uez, a mis à notre disposition plusieurs exemples, que j'ai déjà testé, mais aucun d'eux ne marche correctement je ne comprends pas pourquoi ça ne marche pas ? Je continus à tester à nouveau.
Cordialement.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#8

Message par Boulanza »

Le code de Uez génère un script.
Comment ?
IMAGESBINAIRES.ZIP ça fonctionne correctement, mais, généralement, quel est son utilité ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#9

Message par Tlem »

Bonjour.
Pourquoi FileInstall() ne ferait-il pas l'affaire ?
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
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#10

Message par walkson »

dans mon code, vous avez 3 icons écrits en binaire par le programme d'Uez
Ces 3 icons sont restitués soit en image, soit dans la mémoire pour s'afficher sur une gui
L'utilité est d'avoir des fichiers intégrés dans le exe compilé par autoit semblable à FileInstall() comme le suggère Tlem
Autre avantage est de travailler uniquement avec la mémoire
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#11

Message par Boulanza »

Merci pour vos réponses, c'est très claire Monsieur walkson. Je vais suivre aussi le conseil de Monsieur Tlem...
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#12

Message par Boulanza »

Bonjour,

Pour Monsieur Tlem. D'après la doc : "La fonction FileInstall() sert à inclure des fichiers dans un script AutoIt compilé. Ces fichiers peuvent ensuite être "extrait" au cours de l'exécution du script compilé si l'instruction est exécutée."

Ce que je cherche est de réunir/regrouper des fichiers dans une archive (box) sans avoir à faire d'installation ou a décompresser l'archive.

Cordialement.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#13

Message par walkson »

un autre avantage par rapport à FileInstall(), ce n'est pas bloqué par l'antivirus (avast)
Je viens de tester le code d'Uez et il retourne des erreurs dues à des déclarations en double et des includes manquantes
Je vous mets le code corrigé pour tester
Fichiers joints
File to Base64 String Code Generator.zip
File to Base64 String Code Generator v1.20 Build 2015-01-20
(125.32 Kio) Téléchargé 318 fois
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#14

Message par Boulanza »

C'est une bonne chose si l'antivirus (avast) le fait passer.
360 Total Security il le considère comme un virus.
le code "FILE TO BASE64 STRING CODE GENERATOR" marche parfaitement.
Voila ma procédure:
1- Je génère mon fichier "test.au3" avec le code "FILE TO BASE64 STRING CODE GENERATOR".
2- je copie le code "test.au3" et je le colle au dessus du script généré par "FILE TO BASE64 STRING CODE GENERATOR" puis je compile "test.exe"
3- J’exécute "test.exe" il marche sans problème.
svp: Est ce la procédure est exacte ?
N.B: Test le process avec "procexp.exe" Résultat: Path Error operning process ("test.exe" il marche sans problème)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#15

Message par Tlem »

Boulanza a écrit :Bonjour,

Pour Monsieur Tlem. D'après la doc : "La fonction FileInstall() sert à inclure des fichiers dans un script AutoIt compilé. Ces fichiers peuvent ensuite être "extrait" au cours de l'exécution du script compilé si l'instruction est exécutée."

Ce que je cherche est de réunir/regrouper des fichiers dans une archive (box) sans avoir à faire d'installation ou a décompresser l'archive.

Cordialement.
Vous n'avez aucune extraction à réaliser après compilation, c'est le script qui gère automatiquement.
Votre script devient votre box.

Quand aux antivirus, aucunes solutions proposées ne conviendra à 100%.

Pour éviter les problèmes d'antivirus la seule solution que j'ai trouvé, c'est de créer un autoextractible 7Zip qui lance par ligne de commande le script non compilé ou éventuellement compilé en a3x (en ayant pris soins d'embarquer l'exécutable autoit3.exe pour que le script fonctionne partout).

Envoyé de mon Smartphone 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é".
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#16

Message par Boulanza »

Bonsoir,
Monsieur Tlem, je vous remercie de cet éclaircissement.
Je vais tester la fonction FileInstall() et je vous ferais mes constatations.
Cordialement.
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#17

Message par Boulanza »

Bonjour,
J'ai testé plusieurs exemples sans succès.
Voici un exemple copié du lien : https://www.autoitscript.com/forum/topi ... ent-534807
#include <File.au3>
Global $hMain, $hEdit, $hExtension, $hDestPath, $hFlag, $hGetDir, $hCopy
Global $sDrive, $sDir, $sFName, $sExt
Global $bExcludeScriptDirLongName = True
$hMain = GUICreate('FileInstall Directory', 580, 380)
$hEdit = GUICtrlCreateEdit('', 10, 10, 560, 300)
GUICtrlCreateLabel('Extension:', 10, 318, 50, 20, 0x001)
$hExtension = GUICtrlCreateInput('*', 65, 315, 50, 20)
GUICtrlCreateLabel('Destination Path:', 120, 318, 90, 20, 0x001)
$hDestPath = GUICtrlCreateInput('@TempDir & ""', 210, 315, 200, 20)
GUICtrlCreateLabel('Flag:', 415, 318, 30, 20, 0x001)
$hFlag = GUICtrlCreateCombo('', 445, 315, 40, 300)
GUICtrlSetData($hFlag, '0|1|', '0')
$hDirDrive = GUICtrlCreateCheckbox("Long Path", 500, 315)
$GetDir = GUICtrlCreateButton("Directory Get Files", 12, 345, 150, 30)
$hCopy = GUICtrlCreateButton("Copy Data", 174, 345, 150, 30)
$Recursive = GUICtrlCreateCheckbox("Recursive", 502, 336, 97, 17)
$IsRecursive = False
GUISetState()
While 1
    Switch GUIGetMsg()
        Case - 3
            Exit
        Case $GetDir
            $Dir = FileSelectFolder('Select a directory to fileinstall', @HomeDrive)
            If Not @error Then
    $Ext = GUICtrlRead($hExtension)
    If GUICtrlRead($Recursive) = 1 then $IsRecursive = True
    $Files = _FileListToArrayEx($Dir, '*.' & $Ext, 1,'',$IsRecursive)
                If IsArray($Files) Then
                    $bExcludeScriptDirLongName = (GUICtrlRead($hDirDrive) <> 1)
                    Dim $sHold = '', $DestPathRoot = GUICtrlRead($hDestPath), $nFlag = GUICtrlRead($hFlag)
                    $sDirHold = 'If Not FileExists("' & $DestPathRoot & '") Then DirCreate("' & $DestPathRoot & '")' & @CRLF
                    For $iCC = 1 To UBound($Files) - 1
                        If ($bExcludeScriptDirLongName) Then
                            _PathSplit($Files[$iCC], $sDrive, $sDir, $sFName, $sExt)
                            If StringRegExpReplace(@ScriptDir, "+z", "") = StringRegExpReplace($sDrive & $sDir, "+z", "") Then
                                $Files[$iCC] = $sFName & $sExt
                            EndIf
                        EndIf
     If StringLeft($Files[$iCC],4) = "DIR " Then
     $DirNameNoRoot = StringTrimLeft($Files[$iCC],StringLen($Dir)+4)
     $sDirHold &= 'If Not FileExists("' & $DestPathRoot & $DirNameNoRoot & '") Then DirCreate("' & $DestPathRoot & $DirNameNoRoot & '")' & @CRLF
     Else
     $FileNameNoRoot = StringTrimLeft($Files[$iCC],StringLen($Dir))
     $sHold &= 'FileInstall("' & $Files[$iCC] & '", "' & $DestPathRoot & $FileNameNoRoot & '", ' & $nFlag & ')' & @CRLF
         EndIf
                    Next
                    GUICtrlSetData($hEdit, '')
                    GUICtrlSetData($hEdit, StringTrimRight($sDirHold, 2) & @CRLF & StringTrimRight($sHold, 2))
                EndIf
            EndIf
$IsRecursive = False
        Case $hCopy
            ClipPut(GUICtrlRead($hEdit))
    EndSwitch
WEnd
Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '', $iRecurse = False)
    If Not FileExists($sPath) Then Return SetError(1, 1, '')
    If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
    If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
    If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
    Local $aBadChar[6] = ['', '/', ':', '>', '<', '|']
    $sFilter = StringRegExpReplace($sFilter, 's*;s*', ';')
    If StringRight($sPath, 1) <> '' Then $sPath &= ''
    For $iCC = 0 To 5
        If StringInStr($sFilter, $aBadChar[$iCC]) Or _
            StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
    Next
    If StringStripWS($sFilter, 8) = '' Then Return SetError(2, 2, '')
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
    Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
    $sTFolder = $oFSO.GetSpecialFolder(2)
    Local $hOutFile = @TempDir & $oFSO.GetTempName
    If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
    Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $DestPathRoot, $sHoldSplit
    For $iCC = 1 To $aSplit[0]
        If StringStripWS($aSplit[$iCC],8) = '' Then ContinueLoop
        If StringLeft($aSplit[$iCC], 1) = '.' And _
            UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
        $sHoldSplit &= '"' & $sPath & $aSplit[$iCC] & '" '
    Next
    $sHoldSplit = StringTrimRight($sHoldSplit, 1)
    If $iRecurse Then
        RunWait(@Comspec & ' /c dir /b /s /a ' & $sHoldSplit & ' > "' & $hOutFile & '"', '', @SW_HIDE)
    Else
        RunWait(@ComSpec & ' /c dir /b /a ' & $sHoldSplit & ' /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
    EndIf
    $DestPathRoot &= FileRead($hOutFile)
If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
    FileDelete($hOutFile)
    If StringStripWS($DestPathRoot, 8) = '' Then SetError(4, 4, '')
    Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($DestPathRoot), 1), @LF)
    Local $sHold
    For $iCC = 1 To $aFSplit[0]
        If $sExclude And StringLeft($aFSplit[$iCC], _
            StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
                If StringInStr(FileGetAttrib($sPath & '' & $aFSplit[$iCC]), 'd') = 0 And _
                    StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') = 0 Then
                    If StringRegExp($aFSplit[$iCC], 'w:') = 0 Then
                        $sHold &= $sPath & $aFSplit[$iCC] & Chr(1)
                    Else
                        $sHold &= $aFSplit[$iCC] & Chr(1)
                    EndIf
                EndIf
                If StringInStr(FileGetAttrib($sPath & '' & $aFSplit[$iCC]), 'd') Or _
                    StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') Then
                    If StringRegExp($aFSplit[$iCC], 'w:') = 0 Then
                        $sHold &= "DIR " & $sPath & $aFSplit[$iCC] & Chr(1)
                    Else
                        $sHold &= "DIR " & $aFSplit[$iCC] & Chr(1)
                    EndIf
                EndIf
    Next
    If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(4, 4, '')
EndFunc
Cordialement.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#18

Message par Tlem »

Merci de lire avec attention les remarques de la fonction FileInstall(). <= Cliquez sur le lien.
Si le Francais vous rebute, lisez la version Anglaise : https://www.autoitscript.com/autoit3/do ... nstall.htm
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é".
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#19

Message par Boulanza »

Bonjour Telm,
Bien sûr que j'ai lu la doc, mais lorsque je compile le code en .exe il ne ne se compile pas, par-contre en testant au3 il marche parfaitement.
DirCreate(@ScriptDir & "\skin\1\")
FileInstall(@ScriptDir & "\Export\*.*",@ScriptDir & "\skin\1\*.*")
Vous n'avez aucune extraction à réaliser après compilation, c'est le script qui gère automatiquement.
Votre script devient votre box.
Pour mois et suivant ma demande le box doit avoir la forme Box.exe ?
Cordialement.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Générer un exécutable sans avoir à faire d'installation ou à décompresser l'archive.

#20

Message par Tlem »

Bon, comme d'habitude les choses vont tourner en rond par manque d'éléments et de précision.

Merci de décrire avec le maximum de détails le fonctionnement désiré ainsi que de nous indiquer à la louche la taille et le nombre de fichier à traiter.


Ps: pour FileInstall(), je doute que vous ayez LU AVEC ATTENTION sinon vous n'auriez pas commis l'erreur qu'il y a dans votre script.

Envoyé de mon Smartphone 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é".
Répondre