Вообщем....есть 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
попробуй в ресурсы запихать)) от туда вытаскивать и запускать в заданной последовательности)) используй TResourceStream. если надо помощь - стукни в асю - разберемсо) 44ноль90пять74восемь
Ну если дело на то, пошло, то работа с реестром - проста и описана в 5005 статей по делфи. Вытаскиевание файлов из ресурсов - тамже описано. Но главное: TResourceStream науя?? Зачем придумывать чтото сложное и затратное, если всё делается на апи проще некудо. Достаточно взять исходники любого джонера.
slesh, мне кажется все достаточно просто)) Code: [COLOR=Green]{$R MyRes.res}[/COLOR] [b]var[/b] Res: TResourceStream; [b]begin[/b] Res := TResourceStream.Create(hInstance, 'exename', 'restype'); Res.SaveToFile('file.exe'); Res.Free; [b]end;[/b] имхо
если пофиг на размер проги то да, а если необходимо все минимизровать, то нифига, придется работать на апи.. все зависит от задачи и знаний кодера.
такое ощущение что на WInAPI это мего большой код. Если дело на то пошло, то нет смысла заботится даже о закрытие хендлов. Один дер прога тработает и всё само закроется ) Code: 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;
Вот накидал простенькую функцию для универсального сохранения ресурсов Code: 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 чтобы брать ресурсы из них. Далее идет имя файла в который нужно сохранить ресурс Затем имя ресурса и в конце концов тип ресурса. Зависит от того куда запихнешь.
Ну дельфи позволяет записать значение в реестр без использования компонента увеличивающего размер проги. Поищи в дельфи ворлде "Запись строки в реестр без использования класса TRegistry"