PDA

View Full Version : مشکل با ساخت برنامه ای مثل کلن درایو



benyamin_pc
جمعه 23 دی 1390, 00:47 صبح
سلام
کسی اطلاعاتی در مورد ساخت برنامه ای مثل کلن درایو داره که مثلا یه فایل ایمیج مخصوص بسازیم که تو یه حرکت و یک لحظه برناممون اونو باز کنه؟

benyamin_pc
جمعه 23 دی 1390, 23:58 عصر
کسی تو این زمینه آشنا نیست؟

Esmail Solhkhah
یک شنبه 16 بهمن 1390, 00:17 صبح
کسی اطلاعاتی در مورد ساخت برنامه ای مثل کلن درایو داره که مثلا یه فایل ایمیج مخصوص بسازیم که تو یه حرکت و یک لحظه برناممون اونو باز کنه؟ برای این تیپ کارا روش اصولی درایور نویسی هست

خود Virtual Clone Drive هم برای این درایو مجازیش درایور نصب میکنه ، زیادن نرم افزارهایی که موقع نصب درایور یا درایورهایی نصب میکنن

این نرم افزارها نیاز به دسترسی نامحدود به منابع سیستم دارن

برنامه های نوشته شده توسط C#‎‎ تو سطح User Mode اجرا میشن ، این برنامه ای که شما میخاید نیاز به سطح Kernel داره

اینترفیس رو میتونید با C#‎‎ بنویسید ولی بیس نیاز به کد سطح هسته دراه

در مورد درایور نویسی یکی رو روز پیش حسش بود یه مقدمه ای نوشتم

http://barnamenevis.org/showthread.php?325728-%D9%86%D8%AD%D9%88%D9%87-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%B1%DB%8C%D9%86%D8%AA%D8%B1-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C


این لینک یه نمونه درایور برا این تیپ کارا

http://www.acc.umu.se/~bosse/ (http://www.acc.umu.se/%7Ebosse/)

موفق باشید.

benyamin_pc
یک شنبه 16 بهمن 1390, 01:36 صبح
در واقع میخام یه سری فایلو پک کنم و بعد بدون اینکه اون پک اکسترکت کنم بشه فایل های توش که شامل فایل اجرائی و دیتاهاش و .. هست رو ران کنم
حالا فکر میکنم بشه از همین راه وارد شد , نظر شما چیه؟

Esmail Solhkhah
یک شنبه 16 بهمن 1390, 12:26 عصر
در واقع میخام یه سری فایلو پک کنم و بعد بدون اینکه اون پک اکسترکت کنم بشه فایل های توش که شامل فایل اجرائی و دیتاهاش و .. هست رو ران کنم
حالا فکر میکنم بشه از همین راه وارد شد , نظر شما چیه؟

بنده با توجه به پست اول شما که درخواست نحوه کار با برنامه هایی مثل کلن درایو

رو کرده بودید درایور نویسی رو پیشنهاد دادم ولی با توجه به این پست آخر شما قضیه فرق کرد

اگه از درایو هایی مثل کلن درایو استفاده کنید درایو مورد نظر قابل نوشتن نخواهد بود (این براتون مسئله ساز نمیشه?)

موضوع بعدی اینکه با فرض استفاده از RAM DRIVE یا ... بازم فایلهاتون تو درایو مورد نظر هستند و قابل مشاهده (مگه اینکه کلک مرغابی سوار کنید)

میتونم سورس درایور مورد نظر رو بهتون بدم ولی پیشنهاد میکنم قضیه رو کامل توضیح بدید تا بشه راهکار مناسب تر رو پیدا کرد

شاید نیازی به درایور نویسی نباشه

بغیر از خود درایو بحث نصب اون تو سیستم مقصد و موارد بعدیش براتون دردسر ساز میشه

موفق باشید.

benyamin_pc
یک شنبه 16 بهمن 1390, 18:51 عصر
به این مشکلاتش تا حدی فکر کرده بودم و گفتم شاید بشه اون درایو تو ui کاربر نمایشش نداد و فقط از خاصیتش که همون باز گشائی اون پک تو رم باشه استفاده کرد
کاری هم که دقیقا مد نظرمه همینه , ایجاد یه پک از یه سری نرم افزار و باز گشائی اون نرم افزارهای داخل اون پک بدون باز کردن پک روی هارد , توسط جامپ و اجرای غیر مجاز از نظر ویندوز هم فکرشو کردم اما فایده نداره چون داخل اون پک فقط یه فایل اجرائی نیست و بعضا فایل های متعدد در زمان اجرا باهم در ارتباطن و اینجوری نمیشه

Esmail Solhkhah
دوشنبه 17 بهمن 1390, 17:19 عصر
به این مشکلاتش تا حدی فکر کرده بودم و گفتم شاید بشه اون درایو تو ui کاربر نمایشش نداد

میشه RAM DRIVE ساخت بعد آیکونش رو غیر فعال کرد تا تو لیست درایوها دیده نشه


شما داخل CD نصب برنامتون یه فایل یا یه سری فایل دارید که احتمالا اینکریپت کردید

یا هر بلایی سرش درآوردید حالا با اجرای برنامه اصلی قراره اینا آنپک بشن تو RAM

و کنترل به برنامه فرعی سپرده بشه این وسط محل آنپک شما RAM هست

فرض کنید با اجرای برنامه اصلی اول یه RAM DRIVE ساخته میشه بدون هیچگونه آیکونی

و شما دیتا رو اونجا آنپک میکنید خب برای ذخیره داده های حاصل از کار کاربر چه فکری کردید

اگه داده ها هم تو این RAM DRIVE ذخیره بشن که اعتباری ندارن


در نظر بگیرید برای ساختن RAM DRIVE برنامه شما همون اول باید درایورتون رو نصب و ران کنه

(اینجا مجوز ADMIN میخاید و بحث احتمالی ساین درایور و گیر دادن آنتی ویروس یا سیستم عامل به درایور آن ساین شده رو هم در نظر بگیرید)

گفتم احتمالی به این دلیل که شاید خوش شانسی بیارید و سیستم عامل رو بحث ساین درایور حساس نباشه (یه نمونه XP - تنظیمات ساین درایو غیر فعال)

هر چند باز میشه این موارد رو با کد حل کرد

موفق باشید.

benyamin_pc
دوشنبه 17 بهمن 1390, 17:34 عصر
برای ذخیره نشدن دیتای کاربر تو رم هم میشه یه فایل ستاپ برای اون برنامه ای که تو اون پک هست در نظر گرفت تا موقه نیاز نصب شه , در اصل اینکارارو برای اینکریپت کردن بیشتر و یکپارچه برنامه هام میخام انجام بدم و البته یه کی گن کلی و یکپارچه با حداقل تغییرات تو هر برنامه , حالا اگه راه یا ایده دیگه ای هم دارین خوشحال میشم مطرح کنین

Esmail Solhkhah
دوشنبه 17 بهمن 1390, 17:44 عصر
برای ذخیره نشدن دیتای کاربر تو رم هم میشه یه فایل ستاپ برای اون برنامه ای که تو اون پک هست در نظر گرفت تا موقه نیاز نصب شه

این درسته ولی با توجه به پست 4 شما بنده فکر کردم اصلا نمیخاید چیزی رو هارد طرف ذخیره بشه


در اصل اینکارارو برای اینکریپت کردن بیشتر و یکپارچه برنامه هام میخام انجام بدم

این خوبه ولی آیا برای هر برنامتون میخاید این کار رو بکنید یا این قضیه رو برای نرم افزار خاصی میخاید ؟


حالا اگه راه یا ایده دیگه ای هم دارین خوشحال میشم مطرح کنین

میتونید همین بحث RAM DRIVE رو اجرایی کنید

چند تا فاز داره :

غیر فعال کردن بررسی ساین درایورها

نصب درایور تو سیستم مقصد

اجرای درایو

غیر فعال کردن نمایش درایو

موفق باشید.

benyamin_pc
دوشنبه 17 بهمن 1390, 20:08 عصر
نه برای نرم افزار خاص نمیخام و همه این کارارو دارم میکنم که بشه اون یکپارچگیو بدون توجه به برنامه ای که مورد اینکریپت واقه میشه برای روند اینکریپت و دیکد انجام داد
ایمیج wdk دانلود کردم اما هنوز یکم یه چیزائیش حس میکنم مشکل دار بشه و هنوز شک دارم همین ایدرو استارت بزنم , مثلا اینکه اون برنامه هائی که قراره اینکریپت شن و بعد از نصبشون وقتی فایل های نصبشونو کپی کنیم بشه رو سیستمی که نصب نیستن به شکل پورتابل اجراشون کرد! این باز مشکل ایجاد میکنه ..
الان دیگه اون رم درایو و بحث مخفی کردن محتویات از دید کاربر با اون مشکل اصلی ذخیره داده های برنامه روی رم و اون راه حله نصب هر برنامه روی هارد الکی میشه و اینکریپته راحت دور زده میشه!
فکر کنم تنها راهش ساخت یه چیزی شبیه ماشین مجازیه که تو اون محیط فایل های اینکریپت شده بتونن همون کاریو که ویندوز برای اجرای فایل ها و ذخیره فایل ها میکنه بکنن .. در واقه ساخت یه سیستم عامل دیگه و ماشین مجازی که اونو تو ویندوز ران کنه و اون خودش فایلو اجرا کنه و با ذخیره و ... هم کار کنه که این کار هم خیلی گندس و باید بی خیالش شم اما اگه ایده ساده تری دارین که بتونه این روند یکپارچرو برای اینکریپت برنامه ها و رانشونو به عهده بگیره خوشحال میشم مطرح کنین

Esmail Solhkhah
سه شنبه 18 بهمن 1390, 20:36 عصر
فکر کنم تنها راهش ساخت یه چیزی شبیه ماشین مجازیه

فکر خوبیه ولی پیاده سازیش به این آسونیا نیس

پیشنهاد میکنم بجای خود ماشین مجازی شما نحوه مدیریت دیسک اون رو پیاده سازی کنید.

موفق باشید.

benyamin_pc
جمعه 21 بهمن 1390, 18:12 عصر
به نظرتون میشه فایل exe کاری کرد که خودشو کلیک کنیم اجرا نشه اما به طریقی یه فایل دیگه بتونه اجراش کنه؟ یا هیچ جور نمیشه exe تو یه exe دیگه embed کرد و توسط اون یکی اونو بدون کپی کردن رو هارد اجراش کرد که تمام روند پایگاه داده و غیرش همچنان دقیق اجرا شه؟
یه چیزائی برای ایمبد کردن یه exe تو یه exe دیگه پیدا کردم اما برای اجرا باز باید رو هارد کپیش کرد! یه راه حل هائیم برای اینکه یه exe روش کلیک کنیم اجرا نشه اما توسط یه exe دیگه بشه اون exe اجراش کرد دارم که همون جامپ و راه غیر مجازه , شما ایدتون چیه؟

Esmail Solhkhah
شنبه 22 بهمن 1390, 00:19 صبح
یا هیچ جور نمیشه exe تو یه exe دیگه embed کرد و توسط اون یکی اونو بدون کپی کردن رو هارد اجراش کردفایل exe رو به Resources پروژتون اضافه کنید

بعد از متد Load کلاس Assembly استفاده کنید

این یه نمونه


byte[] buffer = Properties.Resources.Test;

Assembly assembly = Assembly.Load(buffer);

MethodInfo method = assembly.EntryPoint;

if (method != null)
{
object obj = assembly.CreateInstance(method.ReflectedType.Name) ;
method.Invoke(obj, new object[0]);
}

اینجا بنده یه فایل اجرایی ساختم بنام Test.exe و اونو اضافه کردم به Resources پروژم

فقط دقت کنید این بیس قضیه هست باید رو موارد مدیریتیش کار کنید.

موفق باشید.

benyamin_pc
شنبه 22 بهمن 1390, 20:07 عصر
تو یه سایت ایمبد کردن یه فایل تو یه فایل از طریق resource دیده بودم اما اونجا نهایتا رایتش میکرد رو هارد تا اجرا شه , الان اینجوری دیگه اونی که تو ریسورسه رایت نمیشه رو هارد؟اگه اینجوره که خوبه , فقط اگه باز از تو رم خودش اجراش میکنه مشکلات دیتا بیسی و ذخیره و این چیزا براش پیش نمیاد؟

Esmail Solhkhah
شنبه 22 بهمن 1390, 22:24 عصر
تو یه سایت ایمبد کردن یه فایل تو یه فایل از طریق resource دیده بودم اما اونجا نهایتا رایتش میکرد رو هارد تا اجرا شه , الان اینجوری دیگه اونی که تو ریسورسه رایت نمیشه رو هارد؟خیر، فایل اجرایی فرعی میشه جزئی از برنامه شما



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

اگه لوکاله میتونید از دیتابیسهایی مثل Vistadb (http://www.vistadb.net/) استفاده کنید، برا این دیتابیس یه نیمچه توضیحی تو این تاپیک گذاشتم (http://barnamenevis.org/showthread.php?327354-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AC%D8%AF%DB%8C%D8%AF)

دیتابیس بهتره رو سیستم باشه ، میتونید دیتای داخلی اونو انکریپت کنید ، به فایل دیتابیس پسورد بدید ، پسوندشو عوض کنید و تو یه مسیر شلوغ پلوغ کپیش کنید (ترکیبی از هر

چهار حالت یه چیز قابل قبولی میشه)

موفق باشید.

benyamin_pc
شنبه 22 بهمن 1390, 23:21 عصر
از شما دوست عزیز ممنون فقط در مورد دیتا بیس منظور من این بودکه برنامه نوشته شده با هر دیتا بیسی که باشه (رمز گذاشتن رو دیتا بیس و لو نرفتن دیتا بیس اینجا منظورم نبود) مهم اینه که اون برنامه ای که از اون دیتا بیس داره استفاده می کنه حالا اگه بیام ایمبدش کنم و اونجوری اجراش کنم همچنان با دیتا بیسش کار میکنه و اگه قرار بوده برنامه که ایمبد شده با فایل ها هم کار کنه مشکلی پیش نمیاد؟ از لحاظ ذخیره داده ها روی هارد
برای اضافه کردنه برنامه exe به ریسورس در هنگام ران تایم با کد قابل انجامه که exe ای که ران تایم به ریسورس اضافه کردیمو اونجوری رانش کنیم؟

Esmail Solhkhah
شنبه 22 بهمن 1390, 23:30 عصر
(رمز گذاشتن رو دیتا بیس و لو نرفتن دیتا بیس اینجا منظورم نبود) مهم اینه که اون برنامه ای که از اون دیتا بیس داره استفاده می کنه حالا اگه بیام ایمبدش کنم و اونجوری اجراش کنم همچنان با دیتا بیسش کار میکنه و اگه قرار بوده برنامه که ایمبد شده با فایل ها هم کار کنه مشکلی پیش نمیاد؟ از لحاظ ذخیره داده ها روی هارد فرضها رو اینطوری میگیریم:

برنامه اصلی شما که از روی CD اجرا میشه (کاربر اجراش میکنه) : App.exe

برنامه فرعی که داخل App.exe قرار داده شده : WinApp.exe

حالا شما میخواهید که WinApp.exe بتونه با دیتابیس و فایل کار کنه ؟


برای اضافه کردنه برنامه exe به ریسورس در هنگام ران تایم با کد قابل انجامه که exe ای که ران تایم به ریسورس اضافه کردیمو اونجوری رانش کنیم؟ران تایم نمیشه چون پروسس اصلی در حال اجراس

مگه اینکه شما بعد بیلد App.exe با ابزارهایی WinApp.exe رو بهش اضافه کنید (فقط دقت کنید احتمالا اینجا بعضی آنتی ویروسها چپ چپ نیگاش کنن)

benyamin_pc
یک شنبه 23 بهمن 1390, 00:57 صبح
دقیقا همینی که گفتین میشه , یه برنامه winapp.exe دارم که با دیتابیس و فایل کار میکنه , حالا یه برنامه دارم که میاد winapp.exe به ریسورس app.exe (بدون کمک ویژوال استادیو و سورسهای برنامه ها ) اضافه میکنه , بعد حالا app.exe اجرا کنم باید از تو خودش wiapp.exe اجرا کنه بدون اینکه تو اجرای winapp.exe مشکل ایجاد کنه , این دقیقا تمام کاریه که میخام انجام بدم , حالا winapp.exe هرچی میخاد باشه و با هرچی میخاد نوشته شده باشه و هر کاری میکرده بعد از اجرا توسط app.exe همچنان انجام بده

Esmail Solhkhah
یک شنبه 23 بهمن 1390, 01:08 صبح
خب آلان مورد کجاس ؟

نمونه که تو پست 13 گذاشتم

فقط اگه این WinApp.exe رو شما ننوشتید میدونید با چه منابعی از سیستم (فایل - حافظه یا هر کوفت و زهر مار دیگه ای) داره کار میکنه ؟

benyamin_pc
یک شنبه 23 بهمن 1390, 06:23 صبح
نه گفتم با هرچی میخاد نوشته شده باشه نه هرکی یعنی مثلا چه با vb6 باشه چه c# و .. , تو روند اجرای winapp مشکلی پیش نمیاد؟ چون winapp تو دل یه برنامه که با c# کد زده شده جا ساز شده(اختلاف کدها و .. تو روند اجرای winapp مشکلی پیش نمیاره؟یعنی مثلا winapp اگه با فایل یا پایگاه داده یا هرچی کار میکرده بازم انجامشون میده؟مثل اون مشکلاتی که تو رم درایو نتیجه گرفتیم که اگه برنامه اجرا شده تو رم درایو بخاد چیزی رایت کنه چون برنامه تو رم باز شده مشکل پیش میاد ..)
مورد دومتونم متوجه نشدم , مگه فرق میکنه اون winapp با فایل کار کنه یا دیتا بیس یا هرچی دیگه؟
در آخر هم فقط الان مشکل اینجاس که اینطور که معلوم شد یه برنامه سومی هم باید باشه که با اجراش بیاد اون winapp تو ریسورس app جاسازی کنه چون میخام این جاسازی بدون استفاده از ویژوال استادیو باشه
الان یه برنامه app داریم که تو ریسورسش winapp بعدا توسط برنامه سومی درج میشه و الانکه نیست کدشو نوشتیم و کامپایلش کنیم مشکلی پیش نمیاره؟

Esmail Solhkhah
یک شنبه 23 بهمن 1390, 16:25 عصر
نه گفتم با هرچی میخاد نوشته شده باشه نه هرکی یعنی مثلا چه با vb6 باشه چه C#‎‎ و .. , تو روند اجرای winapp مشکلی پیش نمیاد؟ اگه کد Native باشه مشکل پیش میاد

متد مربوطه از کلاس اسمبلی خروجیش رو ببینید چیه : یه آبجکت از کلاس مذکور پس طبیعتا کد Native نمیتونه اینجا قرار بگیره

اگه بخاید کدهای Native رو به این صورت اجرا کنید دنگ و فنگش زیاده

یه راهکار ساده تر اینکه فایل مذکور رو از ریسورس تو مسیر Temp استخراج کنید و پسوندشو موقع استخراج cmd یا bat بذارید بعد از همون مسیر اجراش کنید بعدشم که معلومه دیلیتش کنید.

اگه نه از Ram Drive استفاده کنید

بازم نه از ماشین مجازی استفاده کنید


مورد دومتونم متوجه نشدم , مگه فرق میکنه اون winapp با فایل کار کنه یا دیتا بیس یا هرچی دیگه؟

اون منبعی که winapp میخاد باهاش کار کنه باید وجود دشته باشه یا نه ؟ شما که از طریق app.exe نمیتونید رو کارای winapp دخالتی داشته باشید (هر چند اینم میشه ولی دارید

کار رو برا خودتون سخت میکنید)


در آخر هم فقط الان مشکل اینجاس که اینطور که معلوم شد یه برنامه سومی هم باید باشه که با اجراش بیاد اون winapp تو ریسورس app جاسازی کنه چون میخام این جاسازی بدون استفاده از ویژوال استادیو باشه

برنامه های زیادی برا این کارا هستن ولی گفتم احتمال زیاد موقع اجرا آنتی ویروس سیستم مشتری بهش چپ چپ نیگا کنه


الانکه نیست کدشو نوشتیم و کامپایلش کنیم مشکلی پیش نمیاره؟

پیشنهاد میکنم یه بار خودتون تست کنید ببینید که موردی وجود نداره

موفق باشید