Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Соединение нескольких файлов (https://forum.antichat.xyz/showthread.php?t=183836)

.while 04.03.2010 13:01

[Delphi] Соединение нескольких файлов
 
Вообщем....есть 3 файла, *.exe ; *.dll ; *.reg....
Надо объединить их в 1 файл что бы при запуске он запускал *.reg и *.exe....
тоесть такая схема exe=exe+dll+reg
прощу помощи ;)

slesh 04.03.2010 13:26

создай WINRAR SFX Архив в который вложи байтник типа
regedit /s file.reg
file.exe
И чтобы после распаковки он запускался

.while 04.03.2010 13:35

ммм...а посредствами дельфи это не сделать?))

St0nX 04.03.2010 14:17

засовываеш все это в ресурсы потом достаеш и запускаеш
Всунуть\высунуть
__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восемь

slesh 04.03.2010 18:21

Ну если дело на то, пошло, то работа с реестром - проста и описана в 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

если пофиг на размер проги то да, а если необходимо все минимизровать, то нифига, придется работать на апи.. все зависит от задачи и знаний кодера. :)

slesh 05.03.2010 00:27

такое ощущение что на 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;


slesh 05.03.2010 00:56

Вот накидал простенькую функцию для универсального сохранения ресурсов
Код:

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 чтобы брать ресурсы из них.
Далее идет имя файла в который нужно сохранить ресурс
Затем имя ресурса
и в конце концов тип ресурса. Зависит от того куда запихнешь.


Время: 21:29