PDA

View Full Version : اجراي خود کار برنامه در زمان اتصال فلش مموري به کامپيوتر



shahnam sha
شنبه 22 اسفند 1388, 05:58 صبح
با سلام دوستان
من مي خواهم يک برنامه بنويسم که زمانيکه فلش را به سيستم متصل مي کنم به صورت خودکار اجرا شود اگر کسي در اين زمينه تجربه اي داره لطفا راهنمايي بکنه.

Netsky
شنبه 22 اسفند 1388, 07:50 صبح
سلام .
البته این نظره منه :
شما باید اول یه برنامه بنویسی که چک کنه آیا فلش به سیستم وصل شده یا نه ؟! اگه وصل شده بود برنامه دوم رو اجرا کنه .
یا اینکه یه برنامه بنویسی که کامل همه کارا رو انجام بده . هم چک کننده اتصال فلش به سیستم باشه و هم عملیات مورد نظر خودتون رو انجام بده . البته به نظر خودم روش دوم بهتره .

teardrop
شنبه 22 اسفند 1388, 08:15 صبح
به نظر من 2راه وجود دارد:
1)از راه گذاشتن Timer
2)از راه چند نخی

اول باید تمامی درایو های سیستم را به دست آوری و بعد تابعی که در یک کلاس(حضور ذهن ندارم)برای تشخیص درایو های فلش استفاده کنی.

این کارها باید به صورت مداوم باشه.اگه این کار رو نکنیT، فرمت امکان داره که قفل بشه.وباید مانند یک وقفه عمل کنه.

کد های تشخیص رو داخل timer یا به صورت چند نخی با interval مناسب بذار.

بهتره از timer استفاده کنی چون نخ نوشتن و مدیریتش سخته.
اگه بیشتر کمک خواستی به این آدرس ایمیل بزن.
hr.hard.boys@gmail.com:متفکر:

Netsky
شنبه 22 اسفند 1388, 12:36 عصر
سلام .
با این کد میتونید درایوهای فلش رو بدست بیارید :



public string Get_Removable_Drives()
{
string RMDRV = "";

foreach (System.IO.DriveInfo DRV in System.IO.DriveInfo.GetDrives())
{
RMDRV = DRV.DriveType.ToString();
if (RMDRV == "Removable")
{
RMDRV = DRV.Name;
}
}
return RMDRV;
}

موفق باشید .............

Himalaya
شنبه 22 اسفند 1388, 13:14 عصر
درسته ولی با این کد اگه چند تا فلش داشته باشیم فقط درایو آخری رو به ما میده
یه کم تغییرش بدیم بد نیست



privatevoid button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
textBox1.Multiline = true;
textBox1.Text = Get_Removable_Drives();
}
publicstring Get_Removable_Drives()
{
string RMDRV = "";
string Total = "";
foreach (System.IO.DriveInfo DRV in System.IO.DriveInfo.GetDrives())
{
RMDRV = DRV.DriveType.ToString();
if (RMDRV == "Removable")
{
Total += DRV.Name + "\r\n";
}
}
return Total;
}

shahnam sha
شنبه 22 اسفند 1388, 15:44 عصر
دوستان خيلي ممنونم که راهنماي کرديد
ولي من ميخواهم در زماني که فلش مموري به سيستم وصل شد به صورت خودکار برنامه اي که روي فلش مموري هست اجرا بشه .ببخشيد اگه بد توضيح دادم ولي به هر حال از راهنمايي هاتون خيلي متشکر و ممنونم. و اگه باز ميتونيد راهنمايي کنيد.

Esmail Solhkhah
شنبه 22 اسفند 1388, 16:58 عصر
سلام
یه سر به سایت CodeProject بزن و جستجو کن
کد کامل اونجا هست.
موفق باشی.

Netsky
شنبه 22 اسفند 1388, 20:01 عصر
با سلام .

سلام
یه سر به سایت CodeProject بزن و جستجو کن
کد کامل اونجا هست.
موفق باشی.
با تشکر از شما دوست عزیز که پاسخ دادید .
البته اگه میشه لطف بفرمایید و یه لینک از اون صفحه ای ( از سایت codeproject ) که بدست آوردید رو قرار بدید یا حداقل بگید که چه کلمه ای رو سرچ کنیم .
با تشکر .........

Netsky
شنبه 22 اسفند 1388, 21:11 عصر
بازم سلام .


ولي من ميخواهم در زماني که فلش مموري به سيستم وصل شد به صورت خودکار برنامه اي که روي فلش مموري هست اجرا بشه .

یه راه حل دیگه به ذهنم رسید که البته اگه دوستمون در پست اولش گفته بود که میخاد برنامه از روی فلش اجرا بشه ، پیشنهاد زیر رو بهش میدادم .
پیشنهاد من اینه :
شما باید به روش بدافزارها عمل کنی . یعنی چی ؟؟؟ یعنی اینکه باید با روش کار بد افزارها آشنا بشی و ببینی که چه طوری خودشون رو از روی فلش اجرا میکنن . روشی که معمولا اکثر بدافزارها بکار میبرن اینه که یه فایل با نام autorun.inf توی ریشه درایو فلش ایجاد میکنن تا به محض اتصال فلش به سیستم خودشون رو اجرا کنن . ( البته راه جلوگیریش هم وجود داره . اگه خواستی بگو تا واست توضیح بدم ) .
بنابراین شما باید ساختار یه فایل autorun مربوط به یه بدافزارها رو بررسی بکنید و اطلاعاتی که باید در فایل ثبت بشه رو داخل فایل خودتون بنویسید . ( البته اگه داخل گوگل یه سرچ بزنید کلی اطلاعات دستگیرتون میشه ) .

Himalaya
شنبه 22 اسفند 1388, 22:33 عصر
یه راه حل دیگه به ذهنم رسید که البته اگه دوستمون در پست اولش گفته بود که میخاد برنامه از روی فلش اجرا بشه ، پیشنهاد زیر رو بهش میدادم .
پیشنهاد من اینه :
شما باید به روش بدافزارها عمل کنی . یعنی چی ؟؟؟ یعنی اینکه باید با روش کار بد افزارها آشنا بشی و ببینی که چه طوری خودشون رو از روی فلش اجرا میکنن . روشی که معمولا اکثر بدافزارها بکار میبرن اینه که یه فایل با نام autorun.inf توی ریشه درایو فلش ایجاد میکنن تا به محض اتصال فلش به سیستم خودشون رو اجرا کنن . ( البته راه جلوگیریش هم وجود داره . اگه خواستی بگو تا واست توضیح بدم ) .

اول میخواستم این جوابو بدم تست هم کردم ولی بالاخره به یه سایت برخورد کردم که اجرای فایل از روی فلش رو به صورت خودکار توضیح داده بود... یکی از معایبش هم اینه ککه تو ویندوز 7 واسه امنیت بیشتر جلوی اجرای اتوماتیک از روی فلش رو گرفتن در حالی که این کار تا ویندوز ویستا قابل انجام بود


کد های تشخیص رو داخل timer یا به صورت چند نخی با interval مناسب بذار

اینو پیشنهاد نمیکنم... مثلا اینتروالش چقد باشه... اگه طولانی یاشه که خوب به محض وارد کردن فلش برنامه اجرا نمیشه و باید منتظر موند
اگه کوتاه باشه خوب شاید ما اصلا نخوایم واسه چند روز برنامه رو اجر کنیم... چه لزومی داره که وجود یا عدم وجود فلش بررسی بشه
من برنامه ثانویه رو (یه برنامه کوچیک که تو استارت آپ قرار داده میشه) واسه اجرای فایل اصلی از روی فلش رو ترجیح میدم... روشش رو هم میگم... مطمئنا بی عیب نیست... چون یه دفه به مخم رسید و نوشتمش

یه برنامه نوشتم که به محض اتصال فلش به usb دنبال یه فایل به اسم 01.txt میگرده و اگه اونو پیدا کنه اجراش میکنه (شما به جای این فایل همون فایل exe خودتونو بزارید
برنامه زیر یه DLL داره که به تولباکس اضافه میشه (واسه کار با USB). بعد از اضافه کردن اونو درگ کنید رو فرم... کنترل اضافه شده چند تا EVENT داره که اونایی که به دردمون میخورن اینان
OnDeviceArrived و OnDeviceRemoved که از اسمشون معلومه چیکار میکنن... اولی وقتی یه وسیله به پورت یو اس بی وصل شد عمل میکنه و دومی وقتی اون وسیله از پورت جدا شد...
کافیه از این dll و کدهای بالا که واسه تشخیص فلش هستن استفاده کنیم و یه برنامه کوچیک بنویسیم و اگه درایو مور نظر فلش بود تو به مسیری که از قبل رو فلش مشخصه (جایی که فایل exe رو فلش قرار گرفته...تو مثال زیر یه فایل متنی رو اجرا میکنم... یه فایل با اسم گفته شده تو شاخه اصلی فلش قرار بدید) دنبال فایل مورد نظر بگردیم اگه پیدا شد که اجراش میکنیم و بعد از اجرا پیغام میدیم که برنامه تو فلان درایو بود.... و اگه فایل نبود یا این فلش فلشی نیست که برنامه ما تو هستش و یا فایل exe از روی اون پاک شده که تو هر 2 حالت برنامه نمیتونه اجرا بشه و پیغام میده فایل پیدا نشد...احتیاجی به فوکوس هم نیست...همین
راستی برنامه رو بزارید تو startup ویندوز و فرم اون رو هم خفی کنید...به هر روشی که خودتون بلدید...

shahnam sha
یک شنبه 23 اسفند 1388, 09:20 صبح
دوستان عزيز ممونم از جوابهاي خوبتون واقعا کارتون درسته
بايد خدمتتون عرض کنم که دوست عزيزم Netsky (http://www.barnamenevis.org/forum/member.php?u=72605) فرمودند از autorun.inf استفاده کنم من اين کار رو کردم ولي عيبي که داره اين هست که در اين حالت برنامه يا فايلي که تعريف ميشه براي اتوران بودن در ليست اول فلش مموري (ليست باز کردن فلش مموري) که براي اتوران هست نمايش داده ميشه و کاربر بايد با انتخاب گزينه اي که در اون ليست اضافه شده برنامه رو باز کنه ولي من مي خوام با اتصال فلش مموري برنامه مورد نظرم که روي فلش مموري هست به طور خودکار اجرا بشه.از دوست عزيزم karaji333 (http://www.barnamenevis.org/forum/member.php?u=53563) هم متشکرم که لطف کرد و يه برنامه کاربردي فرستاد.
بازهم اگه ميتونيد راهنمايي کنيد. از همه دوستان متشکرم که جواب ميدن.

Netsky
یک شنبه 23 اسفند 1388, 13:14 عصر
سلام .


کاربر بايد با انتخاب گزينه اي که در اون ليست اضافه شده برنامه رو باز کنه

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

mahdidabaghi
چهارشنبه 11 آبان 1390, 12:31 عصر
سلام
این سورس بسیار زیبایی که دوستمون گذاشته بودن نیازه که برنامه اول تو حافظه مقیم شه یا این که حداقل یه بار اجرا بشه
حالا ایا روشی هست (با کد نویسی سی شارپ یا هر زبون و روش دیگه ای) که برنامه تو فلشمون به محض وصل شدن فلش به طور اتومات در حافظه مقیم شه)