PDA

View Full Version : ساخت يک فايل آرشيو SFX با دلفي



h_mohamadi
پنج شنبه 15 فروردین 1392, 12:15 عصر
با سلام خدمت دوستان گرامي و تبريک سال نو
من مي خواهم برنامه اي بنويسم که چند تا فايل را کنار هم جمع کند و يک exe تحويل دهد که با اجراي اين exe برناهه اين فايل ها را اکسترکت کرده و يک exe که داخل اين فايل ها است را اجرا نمايد درست مثل کاري که winrar انجام مي دهد.
ممنون مي شوم دوستان راهنمايي کنند که کامپوننتي و يا smpele براي اين کار است؟؟؟

یوسف زالی
پنج شنبه 15 فروردین 1392, 13:04 عصر
سلام.
همه رو به ریسورس تبدیل کنید. خیلی راحته.
ریسورس رو به برنامه تون Embed کنید و در هنگام اجرا اونها رو اکسترکت کنید.
نیازی به هیچ کامپوننت نیست. فکر می کنم در حدود 60 70 خط برنامه نویسی لازم داره.

majidbestgame
پنج شنبه 15 فروردین 1392, 13:54 عصر
سلام
همون طور که دوستمون گفتن میتونید فابل هاتونو ریسورسشون کنید. البته اگه فشرده سازی مد نظرتون نباشه
اگه بخواین فشردش کنید توصیه میکنم از کامپونت ها موجود استفاده کنید
FlexCompress (http://www.componentace.com/compression_component_compression_delphi_encryptio n_delphi_flexcompress.htm)
ZipForge (http://www.componentace.com/zip_component_zip_delphi_zipforge.htm)
ZipTV (http://www.ziptv.com/index.html)
موفق باشید

h_mohamadi
پنج شنبه 15 فروردین 1392, 14:07 عصر
من سمپلي براي ZipForge که بتواند فايل sfx بسازد پيدا نکرده ام؟؟؟
فکر کنم FlexCompress (http://www.componentace.com/compression_component_compression_delphi_encryptio n_delphi_flexcompress.htm) بهتر است؟؟
آيا دوستان مثالي براي FlexCompress (http://www.componentace.com/compression_component_compression_delphi_encryptio n_delphi_flexcompress.htm) دارند که sfx را بسازد؟؟؟

majidbestgame
پنج شنبه 15 فروردین 1392, 15:57 عصر
برای ساختن sfx میتونی از FlexCompress استفاده کنی
اگرم sample میخوای میتونی بعد از نصب کامپوننت برای تو مسیر

C:\Users\Public\Documents\ComponentAce\FlexCompres s\Demos
اونجا مثال برای ساختن Sfx و اکستراکت کردنش داره
-------------------------------
همیشه قدردانی از دیگران به خاطر کمکشان باعث میشه بیشتر برات وقت بزارن :D:لبخند:

h_mohamadi
شنبه 17 فروردین 1392, 16:36 عصر
برای ساختن sfx میتونی از FlexCompress استفاده کنی
اگرم sample میخوای میتونی بعد از نصب کامپوننت برای تو مسیر

C:\Users\Public\Documents\ComponentAce\FlexCompres s\Demos
اونجا مثال برای ساختن Sfx و اکستراکت کردنش داره
-------------------------------


من هر کاري کردم نتوانستم باهاش کار کنم چون يک فايل fxc مي خواهد که من نمي دانم بايد چه طور آن را با تنظيمات خودم بسازم

سعید صابری
شنبه 17 فروردین 1392, 21:03 عصر
zipforge به راحتی این کار انجام میده .فکر کنم توی فایل راهنماش مثال باشه

ZipForge1.MakeSFX('filename');

majidbestgame
یک شنبه 18 فروردین 1392, 01:15 صبح
من هر کاري کردم نتوانستم باهاش کار کنم چون يک فايل fxc مي خواهد که من نمي دانم بايد چه طور آن را با تنظيمات خودم بسازم

سلام اینم یه نمونه کد

procedure TForm1.Button1Click(Sender: TObject);
begin
with archiver do // archiver is TFlexCompress Component
begin
FileName:='C:\Archive.fxc'; // name for archive
OpenArchive(fmCreate); // create archive
AddFiles('F:\myfiltosfx1.exe'); // add file to compress
// AddFiles('F:\myfiltosfx2.exe'); // add file to compress
// AddFiles('F:\myfiltosfx3.exe'); // add file to compress
SFXStub:='C:\SFXStub.exe'; // path of stub file
MakeSFX('C:\mysfx.exe'); // path to create sfx.exe file
CloseArchive; // close archive
end;
end;
با این کد میتونی فایل آرشیو و SFX رو بسازی فقط به فایل SFXStub.exe نیاز داری که اونم تو مسیر مثال ها موجوده
اگه باز سوالی بود هستم خدمتتون

h_mohamadi
یک شنبه 18 فروردین 1392, 08:56 صبح
ممنونم از راهنمايي شما آقا مجيد عزيز
من چند سئوال دارم (http://barnamenevis.org/member.php?142100-majidbestgame)
1- اين فايل Archive.fxc در خودش چه چيز ها و تنظيماتي را دارد؟؟
2-من اگر بخواهم فايل ها و فولدر هايي که مي خواهم در exe باشد را در اين فايل بايد بدهم؟؟
3-حالا من اگر بخواهم اين فايل ها به صورت مخفي اکسترکت شده و سپس يک فايل exe که داخل آن است اجرا شود بايد چيکار کنم؟؟
ببخشيد که خيلي سئوال پرسيدم
ممنونم

http://barnamenevis.org/images/statusicon/user-offline.png

majidbestgame
یک شنبه 18 فروردین 1392, 11:22 صبح
ممنونم از راهنمايي شما آقا مجيد عزيز
من چند سئوال دارم (http://barnamenevis.org/member.php?142100-majidbestgame)
1- اين فايل Archive.fxc در خودش چه چيز ها و تنظيماتي را دارد؟؟
2-من اگر بخواهم فايل ها و فولدر هايي که مي خواهم در exe باشد را در اين فايل بايد بدهم؟؟
3-حالا من اگر بخواهم اين فايل ها به صورت مخفي اکسترکت شده و سپس يک فايل exe که داخل آن است اجرا شود بايد چيکار کنم؟؟
ببخشيد که خيلي سئوال پرسيدم
ممنونم

http://barnamenevis.org/images/statusicon/user-offline.png

سلام
1:این فایل Archive.fxc در واقع یک فایل فشردست که میتونه از هر چندتا فایل تشکیل شده باشه
یعنی شما هر فایلی رو که میخوایین فشرده کنید اول تو این ذخیره میشه
2:بعد از اینکه فایل SFX شما ساخته بشه دیگه به این فایل FXC نیازی ندارین
3:اگه بخوایین به صورت سایلنت اکستراکت بشه کافیه فایل SFXStub.exe رو ویرایش کنید - پروژه ش تو demo ها هست و به این صورت که یک پارامتر به هنگام اجرای SFX براش بفرسی و SFX هم پارامتر رو بخونه و بر اساس او به صورت سایلنت اکستراکت کنه
به این صورت مثلا:
WinExec('"C:\Users\myusername\Documents\RAD Studio\Projects\Win32\Debug\newpro.exe" runsilent',SW_hide);
خواهش . خوشحال میشم اگه بتونم کمکی بکنم

h_mohamadi
یک شنبه 18 فروردین 1392, 13:42 عصر
سلام
1:این فایل Archive.fxc در واقع یک فایل فشردست که میتونه از هر چندتا فایل تشکیل شده باشه
یعنی شما هر فایلی رو که میخوایین فشرده کنید اول تو این ذخیره میشه
2:بعد از اینکه فایل SFX شما ساخته بشه دیگه به این فایل FXC نیازی ندارین
3:اگه بخوایین به صورت سایلنت اکستراکت بشه کافیه فایل SFXStub.exe رو ویرایش کنید - پروژه ش تو demo ها هست و به این صورت که یک پارامتر به هنگام اجرای SFX براش بفرسی و SFX هم پارامتر رو بخونه و بر اساس او به صورت سایلنت اکستراکت کنه
به این صورت مثلا:
WinExec('"C:\Users\myusername\Documents\RAD Studio\Projects\Win32\Debug\newpro.exe" runsilent',SW_hide);
خواهش . خوشحال میشم اگه بتونم کمکی بکنم

1- من اين فايل Archive.fxc را چه طوري بايد بهش بگم چه فايل و فولدري را ازش بگيرم و چه طور بگم بعد از اکسترکت شدن بگم يک exe مه داخل همين هاست را اجرا کن
2- من اگر بخواهم فايل ها و فولدر هايي که مي خواهم در exe باشد را در اين فايل بايد بدهم يا از دستور زير بايد بگم
AddFiles('F:\myfiltosfx1.exe');
چه طور مي تواتنم بگم کليه فايل ها و فولدرهاي داخل يک فولدر را بگم اضافه کن

h_mohamadi
دوشنبه 19 فروردین 1392, 12:40 عصر
دوستان کمک؟؟

majidbestgame
دوشنبه 19 فروردین 1392, 20:08 عصر
1- من اين فايل Archive.fxc را چه طوري بايد بهش بگم چه فايل و فولدري را ازش بگيرم و چه طور بگم بعد از اکسترکت شدن بگم يک exe مه داخل همين هاست را اجرا کن
2- من اگر بخواهم فايل ها و فولدر هايي که مي خواهم در exe باشد را در اين فايل بايد بدهم يا از دستور زير بايد بگم
AddFiles('F:\myfiltosfx1.exe');
چه طور مي تواتنم بگم کليه فايل ها و فولدرهاي داخل يک فولدر را بگم اضافه کن

1:برای اینکه چه فایل ها و پوشه هایی رو اکستراکت کنه هم میتونی بر اساس فرمت فایل و هم نام فایل اکستراکت کنی - برای اجرای اون فایل Exe بعد از اکستراکت باید فایل StubSFX.exe رو ویرایش کنی اگه اسم فایلت ثابته که راحته..اگرم متغیره و هر چیزی ممکنه باشه که باید اسم اون فایل رو در انتهای Stubsfx بعد از ساخته شدنش بنویسی و SFXStub بعد اجرا شدن اسم اون فایل رو از انتهای خودش بخونه
2: هم میتونی از درستور Addfiles(اسم فایل) استفاده کنی هم از فرمت آنها *.*
3:
AddFiles(*.*)

h_mohamadi
پنج شنبه 29 فروردین 1392, 10:34 صبح
1: برای اجرای اون فایل Exe بعد از اکستراکت باید فایل StubSFX.exe رو ویرایش کنی اگه اسم فایلت ثابته که راحته..اگرم متغیره و هر چیزی ممکنه باشه که باید اسم اون فایل رو در انتهای Stubsfx بعد از ساخته شدنش بنویسی و SFXStub بعد اجرا شدن اسم اون فایل رو از انتهای خودش بخونه
AddFiles(*.*)
ممنونم
ولي چه طوري در فايل SFXStub بگم فايل را پس از اکسترک اجرا کند و چطوري ديگر سئوال اينکه ريپليس کند را نپرسد و چه طوري در فايل tem اين کار انجام شود.

Felony
پنج شنبه 05 اردیبهشت 1392, 05:54 صبح
ویندوز برنامه ای داره با نام IExpress که وظیفه ساخت آرشیو exe از فایل ها رو بر عهده داره و قابلیت های متنوعی هم داره ، وقتی این برنامه رو اجرا میکنید تمام مراحل ساخت فایل مورد نظر رو طی کنید ، در آخر علاوه بر فایل تولید شده یک فایل بافرمت SED بهتون تحویل میده که در اصل ساختار متنی داره و میتونید با notepad و ... ویرایشش کنید ، ساختار فایل رو بررسی کنید و اون رو در قالب یک TStringList یا ... در دلفی پیاده کنید و نام فایل هاتون رو با توجه به ساختارش داخلش قرار بدید ، در آخر تو برنامتون متن تولید شده رو جایی مثل پوشه Temp ویندوز ذخیره کنید و آدرسش رو به وسیله تابع ShellExecute بدید به IExpress تا فایل نهایی رو براتون تولید کنه .

برای تولید پکیج باید پارامتر n/ و سایلنت بودن روند تولید پارامتر q/ رو هم پاس بدید .

ار فایل rar.exe که همراه نرم افزار Winrar نصب میشه هم میتونید استفاده کنید ، خوبی IExpress این هست که خودش تو تمام نسخه های ویندوز موجود هست .

h_mohamadi
شنبه 07 اردیبهشت 1392, 17:55 عصر
ویندوز برنامه ای داره با نام IExpress که وظیفه ساخت آرشیو exe از فایل ها رو بر عهده داره و قابلیت های متنوعی هم داره ، وقتی این برنامه رو اجرا میکنید تمام مراحل ساخت فایل مورد نظر رو طی کنید ، در آخر علاوه بر فایل تولید شده یک فایل بافرمت SED بهتون تحویل میده که در اصل ساختار متنی داره و میتونید با notepad و ... ویرایشش کنید ، ساختار فایل رو بررسی کنید و اون رو در قالب یک TStringList یا ... در دلفی پیاده کنید و نام فایل هاتون رو با توجه به ساختارش داخلش قرار بدید ، در آخر تو برنامتون متن تولید شده رو جایی مثل پوشه Temp ویندوز ذخیره کنید و آدرسش رو به وسیله تابع ShellExecute بدید به IExpress تا فایل نهایی رو براتون تولید کنه .

برای تولید پکیج باید پارامتر n/ و سایلنت بودن روند تولید پارامتر q/ رو هم پاس بدید .

ار فایل rar.exe که همراه نرم افزار Winrar نصب میشه هم میتونید استفاده کنید ، خوبی IExpress این هست که خودش تو تمام نسخه های ویندوز موجود هست .

ممنونم به روش بسيار جالبي اشاره نموده ايد ولي چطوري به IExpress بگم اجرا شو و فايل را لود کن و فايل exe را بساز

BORHAN TEC
شنبه 07 اردیبهشت 1392, 18:05 عصر
لااقل یه سرچ می کردید:
http://support.microsoft.com/kb/197147
برای فرستادن پارامترها هم می توانید از تابعی مثل ShellExecute استفاده کنید.

h_mohamadi
دوشنبه 09 اردیبهشت 1392, 08:38 صبح
لااقل یه سرچ می کردید:
http://support.microsoft.com/kb/197147
برای فرستادن پارامترها هم می توانید از تابعی مثل ShellExecute استفاده کنید.
ممنونم ولي من متاسفانه با ShellExecute کار نکرده ام و نمي دانم بايد چيکار کنم آخه من مبتدي هستم.

Felony
دوشنبه 09 اردیبهشت 1392, 14:18 عصر
کمی به خودتون زحمت جستجو کردن بدید .

h_mohamadi
سه شنبه 10 اردیبهشت 1392, 17:08 عصر
دوستان من مطالب را خواندم ولي يک سئوال دارم و آن هم اين است که آيا کليد ها را بايد چيکار کنم گذاشتم ولي جواب نمي دهد

procedure TMinform.Button4Click(Sender: TObject);
var PsysDir: array [0..255] of Char;
filename,parameters:String;
begin
GetSystemDirectory(PsysDir,255);
filename:=StrPas(PsysDir)+'\iexpress.exe';
parameters := '/q';
ShellExecute(handle,'open',PChar(filename), PChar(parameters),'',SW_SHOWNORMAL);
end;

Felony
سه شنبه 10 اردیبهشت 1392, 23:42 عصر
خسته نباشید ؛
اسم فایل SED رو کجا به iExpress میدید ؟ خودش باید حدس بزنه ؟
خوبه توضیح دادم که برای تولید پکیج باید پارامتر n/ رو ارسال کنید :


var
Parameters: String;
begin
Parameters := 'C:\Users\Home\Desktop\1.SED /n /q';
ShellExecute(handle, 'open', PChar('iexpress.exe'), PChar(Parameters), nil,
SW_SHOWNORMAL);
end;

:|

h_mohamadi
پنج شنبه 12 اردیبهشت 1392, 12:27 عصر
ممنونم جناب آقاي تاجيک اما مشکلي که من با iexpress دارم اين است که چه طور فولدر را بدهم
من يک توضيح کامل بدهم
من يک پوشه دارم به نام 1
من مي خواهم هرچي فايل و فولدر داخل پوشه 1 است را به يک فايل exe تبديل کنم و بعد از آن فايل run.exe که داخل آن است را اجرا کنم
فايل هاي داخل فولدر 1 شامل:
SD.txe
fr.dll
fgh.sys
ser.dat
فولدر fg
فولدر te
run.exe
و ...
حالا بايد چيکار کنم

Felony
پنج شنبه 12 اردیبهشت 1392, 17:39 عصر
لا الله الی الله ...

دوست عزیز ، من توضیحات مورد نیاز رو گفتم ، اون همه توضیح تو پست 15 برای چی بود پس ؟ یک بار اونه فایل مورد نظر رو با iExpress دستی بسازید ، بعد اون فایل sed تولید شده رو بررسی کنید ببینید ساختارش چی هست ، همون رو با دلفی بسازید .

Felony
سه شنبه 24 اردیبهشت 1392, 19:04 عصر
با توجه به درخواستی که در پیغام خصوصی چند بار برام ارسال کردید این پست رو میزنم ؛

برای اضافه کردن فایل ها و فولدر ها ی یک پوشه اگر از دلفی 7 و قبل از اون استفاده میکنید به وسیله توابع FindFirst و FindNext و اگر از دلفی 2009 به بعد استفاده میکنید به وسیله متد GetFiles از رکورد TDirectory از کتابخانه IOUtils میتونید لیست فایل های داخل یک پوشه و زیر پوشه های اون رو به صورت زیر به دست بیارید :


var
A: TStringDynArray;
begin
A:= TDirectory.GetFiles('D:\', '*.*', TSearchOption.soAllDirectories);

* کتابخانه های IOUtils و Types باید به Uses اضافه شوند .

حالا که آدرس همه فایل ها رو دارید میتونید طبق همون ساختار فایل های SED به فایل SED خودتون اضافش کنید و نهایتا فایل SED تولید شده رو به iExpress بدید تا خروجی رو تولید کنه .

همه چیز رو کامل توضیح دادم ، لظفا دیگه سوالی راجع به اینکه چطور این کار رو بکنید نپرسید و در مورد موارد توضیح داده شده تحقیق و جستجو کنید .