Page 1 sur 2

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

Posté : jeu. 18 juil. 2019 12:06
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.

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

Posté : jeu. 18 juil. 2019 13:02
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.

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

Posté : jeu. 18 juil. 2019 13:23
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.

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

Posté : jeu. 18 juil. 2019 14:27
par walkson
Bonjour,
Je ne sais pas si cela correspond à votre attente ?
https://www.autoitscript.com/forum/topi ... es-easily/

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

Posté : jeu. 18 juil. 2019 15:51
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.

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

Posté : jeu. 18 juil. 2019 16:20
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

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

Posté : jeu. 18 juil. 2019 16:31
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.

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

Posté : jeu. 18 juil. 2019 16:51
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é ?

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

Posté : jeu. 18 juil. 2019 17:29
par Tlem
Bonjour.
Pourquoi FileInstall() ne ferait-il pas l'affaire ?

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

Posté : jeu. 18 juil. 2019 18:08
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

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

Posté : jeu. 18 juil. 2019 18:14
par Boulanza
Merci pour vos réponses, c'est très claire Monsieur walkson. Je vais suivre aussi le conseil de Monsieur Tlem...

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

Posté : jeu. 18 juil. 2019 18:23
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.

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

Posté : jeu. 18 juil. 2019 18:29
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

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

Posté : jeu. 18 juil. 2019 19:04
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)

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

Posté : jeu. 18 juil. 2019 22:49
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


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

Posté : jeu. 18 juil. 2019 23:32
par Boulanza
Bonsoir,
Monsieur Tlem, je vous remercie de cet éclaircissement.
Je vais tester la fonction FileInstall() et je vous ferais mes constatations.
Cordialement.

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

Posté : sam. 20 juil. 2019 15:17
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.

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

Posté : sam. 20 juil. 2019 16:31
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

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

Posté : sam. 20 juil. 2019 18:49
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.

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

Posté : sam. 20 juil. 2019 19:34
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