Просмотр полной версии : [Delphi] Соединение нескольких файлов
Вообщем....есть 3 файла, *.exe ; *.dll ; *.reg....
Надо объединить их в 1 файл что бы при запуске он запускал *.reg и *.exe....
тоесть такая схема exe=exe+dll+reg
прощу помощи ;)
создай WINRAR SFX Архив в который вложи байтник типа
regedit /s file.reg
file.exe
И чтобы после распаковки он запускался
ммм...а посредствами дельфи это не сделать?))
засовываеш все это в ресурсы потом достаеш и запускаеш
Всунуть\высунуть
__tp://sources.ru/cpp/faqs/75.htm
Запуск файлов
Это
__tp://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
или это
__tp://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
думаю переведеш на делфи API вроде как... Запуск прямо из ресурсов явно не твой вариант. Но вот:
__tp://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_frm/thread/4b1e32b9f1c355d6/368a7f2d7579f5cc?tvc=1#368a7f2d7579f5cc
RedFern.89
04.03.2010, 15:22
попробуй в ресурсы запихать)) от туда вытаскивать и запускать в заданной последовательности)) используй TResourceStream. если надо помощь - стукни в асю - разберемсо) 44ноль90пять74восемь
Ну если дело на то, пошло, то работа с реестром - проста и описана в 5005 статей по делфи.
Вытаскиевание файлов из ресурсов - тамже описано. Но главное: TResourceStream науя??
Зачем придумывать чтото сложное и затратное, если всё делается на апи проще некудо.
Достаточно взять исходники любого джонера.
RedFern.89
04.03.2010, 18:58
slesh, мне кажется все достаточно просто))
{$R MyRes.res}
var Res: TResourceStream;
begin
Res := TResourceStream.Create(hInstance, 'exename', 'restype');
Res.SaveToFile('file.exe');
Res.Free;
end;
имхо
[stranger]
04.03.2010, 23:34
если пофиг на размер проги то да, а если необходимо все минимизровать, то нифига, придется работать на апи.. все зависит от задачи и знаний кодера. :)
такое ощущение что на WInAPI это мего большой код. Если дело на то пошло, то нет смысла заботится даже о закрытие хендлов. Один дер прога тработает и всё само закроется )
var
Info, FH, BW : dword;
begin
Info := FindResource(hinstance, pchar(101), 'LOADER');
if Info <> 0 then
begin
FH := CreateFile('loader.exe', GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
if FH <> INVALID_HANDLE_VALUE then
begin
WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil);
CloseHandle(FH);
end;
end;
end;
Вот накидал простенькую функцию для универсального сохранения ресурсов
function SaveRes2File(module:dword; outfile: string; ResName, ResType: Pchar):boolean;
var
ResInfo : dword;
ResData : pointer;
Res : dword;
h : THandle;
wb : dword;
begin
result := false;
ResInfo := FindResourceA(module, ResName, ResType);
if ResInfo <> 0 then
begin
Res := LoadResource(0, ResInfo);
if Res <> 0 then
begin
ResData := LockResource(Res);
if ResData <> nil then
begin
h := CreateFileA(pchar(outfile), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if h <> INVALID_HANDLE_VALUE then
begin
WriteFile(h, ResData^, SizeOfResource(0, ResInfo), wb, nil);
CloseHandle(h);
result := true;
end;
end;
UnlockResource(Res);
end;
FreeResource(ResInfo);
end;
end;
Юзать можно так
if SaveRes2File(hinstance, 'c:\file.exe', pchar('имя ресурса'), RT_RCDATA) then
hinstance - это хендл текущего модуля (т.е. проги). Таким образом можно указывать и хендлы DLL чтобы брать ресурсы из них.
Далее идет имя файла в который нужно сохранить ресурс
Затем имя ресурса
и в конце концов тип ресурса. Зависит от того куда запихнешь.
mr. ZetRikS
05.03.2010, 18:27
Ну дельфи позволяет записать значение в реестр без использования компонента увеличивающего размер проги.
Поищи в дельфи ворлде "Запись строки в реестр без использования класса TRegistry"
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot