وقتی برنامه در حال اجرا است چه طور می توان از اجرای مجدد آن جلوگیری کرد؟
وقتی برنامه در حال اجرا است چه طور می توان از اجرای مجدد آن جلوگیری کرد؟
می تونین از کد زیر استفاده کنین
[STAThread]
staticvoid Main() // args are OK here, of course
{
bool ok;
System.Threading.Mutex m = new System.Threading.Mutex(true, "YourNameHere", out ok);
if (!ok)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.Run(newForm1()); // or whatever was there
GC.KeepAlive(m); // important!
}
آخرین ویرایش به وسیله علیرضا مداح : یک شنبه 23 تیر 1387 در 17:29 عصر
از کد زیر هم می تونید در رویداد Form_Load فرم اصلی تون استفاده کنید
Process cp= Process.GetCurrentProcess();
Process[] p = Process.GetProcessesByName(cp.ProcessName);
if (p.Length > 1)
{
MessageBox.Show("programe is run");
Application.Exit();
}
البته روش پست قبلی بهتره.
مکنه این دور روش رو مقایسه فنی بکنید؟
فرقی که من متوجه شدم اینه که اگه از فایل exe ی که با کد پست من ایجاد شده ، چند تا کپی بگیری ، می توانید تک تک کپی ها را همزمان اجرا کنید ولی از هر کپی فقط یک نمونه از برنامه اجرا می شود.
ولی فایل exe تولید شده توسط پست قبلی اینجوری نیست و کلا فقط یک نمونه از برنامه اجرا می شود.
جالبه، یعنی کد شما به فایل بستگی داره ولی کد beh_develop که من هم تا کنون از آن استفاده می کردم به فایل فیزیکی بستگی نداره.
حالا تو بخش VB.Net هم دوستمون shahrdar در این پست روش زیر رو پیشنهاد دادن
Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupN extInstanceEventArgs) Handles Me.StartupNextInstance
e.BringToForeground = True
End Sub
و گفتن که :
تا حالا شد سه روش، شما اطلاعی در مورد این روش آخر دارید؟استاندارد ترین و منطقی ترین روش اینه
از داخل My Project در قسمت Application دکمه View Application Events رو زده و از رویدادها ،رویدد startupnextinstance رو انتخاب کنید
من همیشه از این کد استفاده میکنم
دقیقا سار عزیز ،تفاوتی که من پیدا کردم همین وابسته بودن به فایل مجری برنامه بود.
خیر دوست عزیز. من اصلا معادل همچین مسیری را در #C پیدا نمی کنیم (View Application Events ) . شما تونستید این روش رو تست کنید؟
نه متاسفانه.
راستش من VB ندارم، فکر کردم مال اونه!!!!
روشی که در VB ذکر شد:
با CheckBox:e.BringToForeground = True
Make single instance application
چه فرقی داره !!!؟
آیا در #C معادل این CheckBox وجود داره؟