PDA

View Full Version : سوال: استفاده از فایلهای Resource



mfarhad
پنج شنبه 31 خرداد 1397, 01:13 صبح
با سلام.
امیدوارم عنوان تاپیک رو درست انتخاب کرده باشم و بتونم سوالم را بصورت واضح مطرح نمایم.
فرض کنید که 2 نوع فایل داریم ، فایل اول که می تواند بصورت های txt ، data ، bin , ... باشد و فایل دوم بصورت exe می باشد که اجرا کننده فایل های اول است. یعنی مثلا :



ShellExecute(Handle,'open','MyExe.exe','MyData.bin ', nil, SW_SHOWNORMAL) ;



فرض کنید که کاربر به فایل های نوع اول (MyData.bin )، نباید دسترسی داشته باشد و فقط بتواند نتیجه آن را بصورت اجرا شده با برنامه MyExe.exe مشاهده کند . اگر ازResourceStreamاستفاده کنم ، هنگام اجرا باید این فایلها را ابتدا در جایی ذخیره کرده و سپس استفاده نماییم و با این کار ،کاربر به راحتی می تواند به آن دسترسی داشته باشد . مانند زیر :


FileName := ExtractFilePath(Application.ExeName)+'MyData.bin';
TRS := TResourceStream.Create(hInstance, 'MyData', RT_RCDATA);
try
TFS := TFileStream.Create(FileName, fmCreate) ;
try
TFS.CopyFrom(TRS, 0) ;

finally
TFS.Free;
end;
finally
TRS.Free;
end;
ShellExecute(Handle,'open','MyExe.exe','MyData.bin ', nil, SW_SHOWNORMAL) ;


اینکه آیا می شود فایل رو ذخیره نکرد و مستقیم اجرا نمود ؟
حتی در پوشه ایی مانند TEMP هم ذخیره نگردد و یا حتی با نام و فرمت دیگری هم ذخیره نگردد ، چون در تمام این ها کاربر می تواند دسترسی داشته باشد.
یا اینکه روش دیگری وجود دارد و از ابتداروش من اشتباه می باشد؟
ممنون می شوم که راهنمایی نمایید. با سپاس

Mask
پنج شنبه 31 خرداد 1397, 10:55 صبح
میتوان فایل رو بدون اکستراکت بر روی دیسک فیزیکی بر روی رم اجرا نمود.ولی اکستراکت کردن فایلها از ریسورس هم کار چندان سختی نیست.
یعنی عملا این روش ،روش امنی برای محافظت از فایلهای جانبی نیست.
شما اصل کاری که مد نظر دارید رو بفرمایید. شاید در کل دارید راه رو اشتباه میرید.

mfarhad
پنج شنبه 31 خرداد 1397, 14:22 عصر
بله ممکنه کلا راه رو اشتباه رفته باشم.
ببینید فایل های اصلی ما که باید محافظت بشوند یک سری فایل های bin هستند (مانند 1b 25 2d 31 32 33 34 35 58 40 50 4a 4c 0d 0a ... ) که با نام MyData.bin ذخیره شده اند.و کاربر به محتوای این فایل ها نباید دسترسی داشته باشد . برنامه اجرایی MyExe.exe ، اجرا کننده این فایل ها است. (بطور مثال فرض کنید که یک فایل موزیک دارید که فقط باید با پخش کننده خاصی پخش شود و کابر امکان دسترسی به فایل موزیک رانداشته باشد ).
هدف ما در برنامه نوشته شده با دلفی این است که با کلیک روی یک باتن ، اجرا کننده exe اجرا شده و bin را اجرا کند.(مثل اینکه برنامه notepad یک txt باز کند).
همچنین نمی خواهم از زیپ کردن استفاده نموده و موقع اجرا اکسترکت کنم.
سپاس از توجهی که داشتید.

Mask
جمعه 01 تیر 1397, 11:57 صبح
بله ممکنه کلا راه رو اشتباه رفته باشم.
ببینید فایل های اصلی ما که باید محافظت بشوند یک سری فایل های bin هستند (مانند 1b 25 2d 31 32 33 34 35 58 40 50 4a 4c 0d 0a ... ) که با نام MyData.bin ذخیره شده اند.و کاربر به محتوای این فایل ها نباید دسترسی داشته باشد . برنامه اجرایی MyExe.exe ، اجرا کننده این فایل ها است. (بطور مثال فرض کنید که یک فایل موزیک دارید که فقط باید با پخش کننده خاصی پخش شود و کابر امکان دسترسی به فایل موزیک رانداشته باشد ).
هدف ما در برنامه نوشته شده با دلفی این است که با کلیک روی یک باتن ، اجرا کننده exe اجرا شده و bin را اجرا کند.(مثل اینکه برنامه notepad یک txt باز کند).
همچنین نمی خواهم از زیپ کردن استفاده نموده و موقع اجرا اکسترکت کنم.
سپاس از توجهی که داشتید.
بنده یه مدتی در این زمینه کارکردم. روالهای زیر رو بررسی و تست کردم
فایلها را در یک فایل رمز دار zip ریخته و بدون اکستراکت روی هارد، در حافظه از فایل زیپ خارج و اجرا میکردم.مشکلی که داشت ، بعضی از فایلها به علت حجم زیاد ، برنامه را سمت out of memory میبرد و عملا به درد نخورد.
روشه بعدی که مفید بود و الان دارم از اون استفاده میکنم.(البته فقط برای فایلهای صوتی و تصویری) : این فایلهارو کد میکنم و پلیر داخلی برنامه بصورت بایت به بایت دیکد میکنه و اجرا میکنه.
حالا اینکه شما فایلهای bpl رو نیاز دارید که محافظت کنید ، میتونید از برنامه MoleBox هم استفاده کنید.MoleBox (http://barnamenevis.org/showthread.php?271593-MoleBox-v2-3-3-v2-6-4)