Question

Y at-il un moyen de lier un fichier .exe existant avec d'autres fichiers source ++ C lors de la compilation? Ce que je suis en train d'essayer de le faire est de compresser et décompresser des fichiers dans mon programme de console à l'aide LZMA (7zip) SDK, mais malheureusement, il est très difficile à utiliser pour un débutant.

Il existe une version en ligne de commande de LZMA appelé 7za.exe et je me demande si je peux en quelque sorte l'intégrer dans mon programme et de l'utiliser comme une fonction. Il peut être facilement utilisé avec le système () fonction (ce qui semble être une chose très dangereuse à utiliser) mais si j'envoie mon programme à quelqu'un qui n'a pas 7za.exe dans le bon dossier, il ne fonctionnera pas.

Je suis tombé sur la fonction CreateProcess () dans les fichiers d'en-tête Windows.h mais il semble réaliser ce système () fait d'une manière plus appropriée et avancée. Je ne sais pas si elle peut réellement le fichier exe comme un fichier objet lors de la compilation

Était-ce utile?

La solution

CreateProcess() est un appel API Windows pour lancer un processus, exactement comme cela ressemble, comme un enfant de votre programme que vous pouvez contrôler en sachant qu'il est HANDLE. system() exécute une commande du système. C'est autant que vous saurez jamais et j'éviter personnellement l'utiliser à tout prix - pas moins parce qu'il est pas portable (la fonction existe sur Windows et Linux, mais la commande ne sera pas)

.

Il est possible d'ajouter les données à la fin d'une image EXE - ce qui est le travail des installateurs comment. Jetez un oeil à cette article de support Microsoft , qui vous donne le code dans baroquement de base, mais vous devriez être capable de le transformer en C ++ trivialement. Voici un article sur créer une auto-extracteur qui pourrait être plus approprié. Les deux devraient vous permettre d'intégrer des fichiers dans l'exe.

Je ne recommande pas vous extrayez 7za et appelez de System() ou CreateProcess() - Je vous recommande d'apprendre le SDK. Il est difficile, mais vous apprendrez beaucoup de le faire.

Enfin, vous devrez modifier un fichier exe existant, vous ne serez pas en mesure de le faire à la compilation. Vous aurez besoin d'avoir le code ajouter que ce soit sa propre image ou d'une autre image.

Plus de détails sur données d'adressage ajouté à un exe .

Autres conseils

Ok, essayez ceci ...

  1. Écrivez une ligne de commande utilitaire qui est simplement une copie d'un fichier à la fin d'une autre. Vous pouvez le faire avec le fichier de Windows E / S ou des commandes shell.
  2. une étape de post-construction qui exécute cet utilitaire. Votre programme sera pleinement lien de la manière habituelle, et votre utilitaire ajoutera simplement octets du deuxième exe à l'exe cible.

C'est l'étape de liaison. Maintenant, l'accès à l'exécution exe est une autre chose. Essentiellement, l'algorithme est le suivant:

  1. Ouvrez le fichier EXE à être intégré dans un éditeur binaire niveau octet (msdev.exe fera). Prenez note des 30 premiers ou 40 octets comme marqueur unique pour le début du fichier.
  2. Ecrire une fonction qui ouvre le fichier composé créé ci-dessus et recherche le fichier intégré en recherchant le marqueur unique.
  3. Une fois le début du fichier intégré est trouvé, copiez les octets de ce fichier à un deuxième nouveau fichier en utilisant le fichier E / S.
  4. Exécuter le nouveau fichier système à l'aide () ou API similaire.

Si vous répartissez le travail de quelqu'un d'autre de cette façon, s'il vous plaît obtenir la licence correcte. Il est généralement violation de copyright de jeter quelqu'un d'autre binaire dans votre propre -. Il y a des exceptions, bien sûr

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top