Page 1 sur 1

Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 8:53
par PhM
Bonjour,

j'aimerai savoir si il est possible de "rassembler" plusieurs programmes *.exe interdépendants en un seul ?

Par exemple, un programme "maitre" principal.exe déclenchant des programmes "esclaves" autonomes: esclave1.exe, esclave2.exe, esclave3.exe.

Le but étant d'obtenir qu'un seul exe. Dans l'exemple, ci-dessus, ne resterait que principal.exe avec les 3 autres programmes "cachés".

Désolé si la question vous semble curieuse...

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 9:49
par microdevweb
Bonjour, il est possible de lancer plusieurs exécutables et qu'il peuvent même communique entre eux avec les runtime.

On peut également créer des dll qui sont compilé et un peux comme des exécutables.

La troisième solution est également de diviser certaines parties de sont programme en threads (attention qu'il est nécessaire de les synchroniser, je compte faire prochainement un tuto la dessus).

Maintenant la meilleur solution dépend de ton problème à résoudre. Mais je penses que le multi-threads serait la solution la plus adaptée.

Un thread est un processus indépendant et non bloquant, il peut accéder cependant au variables globales et on lui passe en paramètre une variable qui peut être par exemple un pointeur sur une structure.

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 10:26
par Zorro
sinon tu peux aussi grouper tout tes programmes dans un Executable

au moment du lancement, l'executable "pond" les programmes dans son dossier
ainsi sur le disque dur on se retrouve avec le programme principale, et les executables "pondu"
il peux les lancer (Runprogram()) , et lorsqu'on quitte le programme principal
il efface les executables (et avant s'occupe de les virer de la Ram ) ... il ne reste que le programme principal !

bien sur tout ceci sera tres mal vu par la plupart des anti-virus ...
un executable qui contient une ou plusieurs executable ressemble etrangement a un virus .. :mrgreen:

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 10:38
par Zorro
tu trouvera ici un moyen d'executer un executable incorporé en datasection

https://www.purebasic.fr/french/viewtop ... =6&t=14704

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 10:45
par PhM
Merci pour toutes les pistes évoquées...
Je vais explorer tout cela maintenant !
Je n'ai jamais "créer" une DLL, ce sera ,peut-être, l'occasion.

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 10:45
par Zorro
sinon pour "pondre" un executable

tu peux utiliser ce vieux code de Flype :

Code : Tout sélectionner

; Façon Flype en procedure
Procedure.l BinToFile(FileName.s, *BinStart, *BinEnd)
    Protected id.l = CreateFile(#PB_Any, FileName)
    If id
        WriteData(id, *BinStart, *BinEnd - *BinStart)
        CloseFile(id)
    EndIf
EndProcedure

BinToFile("c:\bin1.exe", ?BIN_START1, ?BIN_END1)  ; ceci fait appel a la procedure qui va "pondre" les executables inclu
BinToFile("c:\bin2.exe", ?BIN_START2, ?BIN_END2)


DataSection
BIN_START1: IncludeBinary "TEST1.EXE" : BIN_END1:  ; <<<<- ici on inclu les executables dans notre programme
BIN_START2: IncludeBinary "TEST2.EXE" : BIN_END2: ; <<<<- ici on inclu les executables dans notre programme
EndDataSection 

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 10:48
par microdevweb
Maintenant si tu décris en gros le design de ton soft, on pourra mieu t'aider :wink:

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 11:00
par PhM
C'est OK merci, j'ai toutes les pistes à explorer que je souhaitais...
La méthode :
; Façon Flype en procédure
semble extrêmement intéressante...

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 11:21
par Marc56
PhM a écrit : j'aimerai savoir si il est possible de "rassembler" plusieurs programmes *.exe interdépendants en un seul ?
Par exemple, un programme "maitre" principal.exe déclenchant des programmes "esclaves" autonomes: esclave1.exe, esclave2.exe, esclave3.exe.

Le but étant d'obtenir qu'un seul exe.
Comme l'a précisé Zorro, inutile de dire que les AV vont bloquer ce genre de méthode (génération d'EXE).

Le système le plus propre est celui qui est utilisé par les programmes commerciaux pour garder l'empreinte mémoire la plus faible:
  • Un petit EXE qui sert de lanceur
  • Des EXE dans le même répertoire
  • Le tout packagé (par exemple avec l'excellent InnoSetup) Un seul raccourci vers l'EXE principal
PS. J'avais fait un petit tuto sur la façon de packager avec InnoSetup, y compris en mettant les versions 32 et 64 bits en même temps et en laissant le système choisir l'installation. Il est toujours valable avec la version 6 d'InnoSetup.


:wink:

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 12:29
par Kwai chang caine
Marc56 a écrit :Comme l'a précisé Zorro, inutile de dire que les AV vont bloquer ce genre de méthode
Et si les autres exe sont zippés ou compacté par le format PB ?
Penses tu que ce sera toujours aussi mal vu ?

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 13:37
par microdevweb
Pour moi,

Si il s'agit de partager des ressources la librairie dynamique (dll / so) est le solution car elle peut-être utilisée par plusieurs exe et n'est chargée q'une seul fois.

Pour un soft modulaire, plusieurs exécutables installé par un installateur.

Pour du multitâche, le multi threading est la solution la plus adaptée.

Donc tout dépend de ce que l'on veux faire.

Maintenant n'oublions pas que la force de Pb est de pouvoir tout contenir dans un simple exécutable sans dépendance.

Re: Plusieurs *.exe dans un seul ???

Publié : sam. 11/janv./2020 23:53
par Ar-S
Sans connaître ton projet il est difficile de te répondre de façon juste.
L'incorporation inter exe cité par Zorro est pratique à l’exécution car parait plus "propre".
Mais il est clair que les AV risquent de faire la tronche. (peut être un peu moins si archivé KCC, mais ça demande en plus de désarchiver le truc à chaque lancement.)
En revanche, cette méthode sera pénible lorsque tu devras mettre à jour un des exe. Tu seras obligé de tout recompiler.. Donc à toi de juger selon ton projet.

Re: Plusieurs *.exe dans un seul ???

Publié : mar. 11/févr./2020 18:08
par bpapon60
Bonjour,
Désolé si je me greffe.
Dans la problématique d'appeler un .exe à partir d'un autre genre un menu.exe qui appelle un clients.exe et un produits.exe par exemple, peut-on comme en quickbasic partager des variables avec l'instruction COMMON mavariablepartagee présente dans tous les exe et en appelant les programmes à partir de MENU.EXE par un CHAIN 'CLIENTS.EXE' ou CHAIN 'PRODUITS' par exemple ?

Re: Plusieurs *.exe dans un seul ???

Publié : mar. 11/févr./2020 22:17
par Ar-S
@bpapon60
Non.
Tu peux cependant passer des paramètres d'un exe à l'autre.
Voir ce topic récent : https://www.purebasic.fr/french/viewtop ... =1&t=17934