Объедините два EXE-файла в один программно

Есть ли способ объединить два EXE-файла в один, программно, так, чтобы выполнение его выполнило бы оба более старых EXE-файла вместе. Я нашел некоторые вещи на Google о введении кода или dll файлов, но являюсь этим, возможные два объединяют два EXE-файла или вводить exe в exe?

Заранее спасибо.

[РЕДАКТИРОВАНИЕ] Спасибо все. Только для тех, кто сказал, что это не возможно, я должен сказать, что почти сделал это в конце в пути некоторые предложенные. Это почти идет как это (я не могу помнить все это, потому что это было давным-давно):

[ОСТЕРЕГАЙТЕСЬ: Этот алгоритм очень похож на те из некоторых червей и вирусов. Я не хакер или создатель вирусов! и это должно использоваться только по экспериментальным или невредным причинам - Делание ошибок в коде может разрушить исполняемые файлы в каталогах.]

1-Exe проверяет размер itself, чтобы обнаружить, было ли что-нибудь добавлено к себе. если это не имеет затем:

     1.1- The exe finds other executable files in its directory (lets call one of them as victim!)
     1.2- it makes a copy of itself (lets call it newMe)
     1.3- it copies the other executable found in the directory to the end of newMe.
     1.4- it deletes the other executable file found and renames newMe to its victim's name.

2-, Если exe обнаруживает, что что-то было добавлено к нему затем:

     2.1- Then it copies data from itself (from ORIGINAL_FILE_SIZE to the end of file) to a new file (lets call it newBorn.exe)
     2.2- It runs itself's code and then executes the newBorn.

Я сказал, что ПОЧТИ сделал это, потому что таким образом exe добавляет другой exe к себе. но это могло быть повторено для добавления и выполнения 2 или даже 3 или больше исполняемых файла в один. просто необходимо знать ORIGINAL_FILE_SIZE записанной программы.

14
задан Auxiliary 5 November 2010 в 16:08
поделиться

7 ответов

Технически возможно встроить некоторые другие файлы exes в exe, некоторые упаковщики, такие как upx, делают это. Таким образом, вы должны быть в состоянии сделать то же самое с 2 exes.

В униксовом стиле ваш exe может разворачиваться, затем первый процесс выполняет первый старый исполняемый файл, а новый процесс выполняет второй exe, возможно, установив канал между ними до.

Но это явно не так просто сделать и, вероятно, бесполезный перебор для ваших потребностей . Вам, вероятно, просто нужен маленький .bat или .sh

-121--2471822-

Нет, вам придется захватить значение переменной экземпляра вне лямбды, если вы хотите, чтобы она была вычислена в это конкретное время.

Это не отличается от того, как если бы вы написали это:

public void SetCashOnHand(int x) {
    this.cashOnHand = x;
    undoStack.Push(UndoSetCashOnHand);
}

private void UndoSetCashOnHand()
{
    this.setCashOnHand(this.cashOnHand);
}

лямбда синтаксис просто сделать его слегка запутанным, поскольку оценка кажется частью тела объявляющего метода, когда в действительности это часть автоматически генерируемой частной функции, которая оценивается так же, как любая другая функция.

Люди обычно обходят это, используя параметризованную функцию и сохраняя значение, которое передается функции как часть стека. Однако если вы хотите использовать функцию parameter- меньше , вам придется захватить ее в локальной системе.

-121--3383520-

Теоретически это возможно, но потребуется некоторое усилие с вашей стороны.

Можно добавить данные в exe-файл, так работают самораспаковывающиеся архивы. Однако вам понадобится собственный формат данных, похожий на файловую систему, потому что у вас есть только один плоский EXE-файл.
Смотрите эту статью Microsoft (в Google гораздо больше) http://support.microsoft.com/?scid=kb%3Ben-us%3B84062&x=12&y=13

Exe, в который вы упаковываете два файла, должен извлечь эти файлы и, наконец, запустить их.

Удачи.

5
ответ дан 1 December 2019 в 13:08
поделиться

Нет, лучше всего создать файл .bat (Windows), который запускает оба исполняемых файла.

@echo off
c:\path\to\first\exe\file1.exe
c:\path\to\second\exe\file2.exe

Вы также можете создать сценарий оболочки в Linux, чтобы сделать то же самое.

#!/bin/sh
/path/to/first/exe/file1
/path/to/second/exe/file2

Обратите внимание, это выполнит file1 перед file2.

5
ответ дан 1 December 2019 в 13:08
поделиться

Технически возможно встраивать некоторые другие файлы exes в ваш exe, некоторые упаковщики, такие как upx, делают это. Так что вы сможете сделать то же самое с двумя бывшими.

В стиле Unix ваш exe может выполнить ветвь, тогда первый процесс выполнит первый старый исполняемый файл, а новый процесс выполнит второй exe, возможно, предварительно установив канал между ними.

Но это явно не так просто сделать и, скорее всего, будет бесполезным излишеством для ваших нужд . Возможно, вам просто понадобится небольшой .bat или .sh

3
ответ дан 1 December 2019 в 13:08
поделиться

Я заметил ваше уточнение "программно", но на всякий случай, если решение вне кода приемлемо для того, что вы делаете...

IExpress может создать EXE, который выполняет два других EXE. Вы можете собрать пакет IExpress из командной строки.

SED-файл:

[Version]
Class=IEXPRESS
SEDVersion=3
[Опции]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
TargetName=C:\combined.exe
FriendlyName=Example Title
AppLaunched=run.bat
PostInstallCmd=
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="FirstProgram.exe"
FILE1="SecondProgram.exe"
FILE2="run.bat"
[SourceFiles]
SourceFiles0=C:\programs\
[SourceFiles0]
%FILE0%=
%FILE1%=
%FILE2%=

run.bat файл:

FIRSTP~1.EXE
SECOND~1.EXE

Когда вы запускаете combined.exe, будет выполняться firstProgram.exe. После его завершения будет запущен файл secondProgram.exe. Если вы хотите, чтобы firstProgram.exe и secondProgram.exe выполнялись одновременно, это можно сделать с помощью изменения BAT-файла.

3
ответ дан 1 December 2019 в 13:08
поделиться

Нет, невозможно "внедрить" один exe в другой. Это действие даже не определено, поскольку у вас нет контроля над внутренними механизмами выполнения, которые вы делаете, когда вставляете объекты друг в друга.

Самое близкое, что возможно с exe-файлами, - это конвейер, в котором вы можете перенаправить вывод одного exe-файла на вход другого:

one.exe | two.exe
-3
ответ дан 1 December 2019 в 13:08
поделиться

Копирование данных из 1 файла в третий Запомните позицию eof. Добавить двоичный файл из второго файла в третий . Затем добавьте в конце число (в int) значения eof. В первом файле должен быть код, который мог бы скопировать весь файл из этого значения в конец в конец файла в другой файл.

И казнить.

Это простой способ сделать это.

1
ответ дан 1 December 2019 в 13:08
поделиться

Вы можете создать свой собственный EXE-файл, который содержит два других EXE-файла в качестве встроенных ресурсов, извлекает и запускает каждый из них.

Помните, что встроенный EXE-файл может не работать, если вы извлечете его в другой каталог.

5
ответ дан 1 December 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: