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

6 11 2008

باسلام، امروز می خوام براتون نشون بدم که چطوری می تونید از اجرای دوباره ی برنامه یتان که قبلا اجرا شده است جلوگیری کنید، معمولا بعضی هکر های خرابکار از این روش استفاده میکنند تا برنامه ای رو چند بار اجرا کرده و با ورود اطلاعات مختلف و تست عملیات، نقاط ضعف برنامه یتان را پیدا کنند و سپس …. ،کلاسی که می تونین از اون برای کنترل اینکار استفاده نمایید کلاس Mutex هستش که در namespace، System.Threading قرار داره. خوب بزارین یک نمونه کد براتون بزارم تا راحتتر و با مثال عملی این کلاس رو تست کنیم.

using System.Threading;
static void Main()
{
  bool appFirstInstance;
  oMutex = new Mutex(true, "Global\\" + “YOUR_APP_NAME”,
                     out appFirstInstance);
  if(appFirstInstance)
    Application.Run(new yourStartupClass());
  else
    MessageBox.Show("برنامه مورد نظر قبلا اجرا شده است.", 
                    "Startup Warning");
}
خوب اجازه بدین یه توضیح مختصری از این تکه کد براتون بدم، پارامتر دوم از سازنده این کلاس نام برنامه ی مورد نظر شما رو دریافت می کنه که قرار کنترل بشه که آیا نمونه ی دیگری از برنامه در حال اجرا هست یا خیر، اگر شما می خواهید که این کنترل در کل سیستم انجام بشه باید از پیشوند Global\\ استفاده کنین، در غیر اینصورت برای کنترل user session نیازی به این prefix که همراه نام برنامه ی شما میاد نیست. پارامتر سوم که یک پارامتر خروجی هستش مشخص کننده اینه که آیا instance ی از برنامه در حال اجرا هست یا خیر. اگر مقدار این پارامتر خروجی true باشه مشخص می شه که همه چیز رو به راهه و نرم افزار می تونه ادامه ی مراحل اجرایی رو طی کنه در غیر اینصورت معلوم میشه که کلاس فوق یک نمونه ی دیگر رو پیدا کرده و دیگه تصمیم با شماست که بعد مشخص شدن این موضوع چه کار می خواهید بکنین. این کنترل رو می تونین در تابع ()Main برنامه تون استفاده کنید.

کارها

Information

2 responses

21 02 2009
رضا

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

21 02 2009
codeprojects

سلام شما لطف دارید، ایمیلتو چک کنید کدی که میخواستید رو براتون میل کردم.

بیان دیدگاه