PDA

View Full Version : نحوه جلوگیری از اجرای مجدد برنامه



amir_pro
جمعه 23 آذر 1386, 16:23 عصر
وقتی برنامه در حال اجرا است چه طور می توان از اجرای مجدد آن جلوگیری کرد؟

beh_develop
جمعه 23 آذر 1386, 17:50 عصر
http://img.tongji.cn.yahoo.com/670284/ystat.gif
می تونین از کد زیر استفاده کنین


[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!
}

hassan razavi
سه شنبه 18 دی 1386, 13:54 عصر
از کد زیر هم می تونید در رویداد Form_Load فرم اصلی تون استفاده کنید


Process cp= Process.GetCurrentProcess();
Process[] p = Process.GetProcessesByName(cp.ProcessName);
if (p.Length > 1)
{
MessageBox.Show("programe is run");
Application.Exit();
}


البته روش پست قبلی بهتره.

سار
سه شنبه 18 دی 1386, 14:16 عصر
مکنه این دور روش رو مقایسه فنی بکنید؟

hassan razavi
سه شنبه 18 دی 1386, 14:25 عصر
فرقی که من متوجه شدم اینه که اگه از فایل exe ی که با کد پست من ایجاد شده ، چند تا کپی بگیری ، می توانید تک تک کپی ها را همزمان اجرا کنید ولی از هر کپی فقط یک نمونه از برنامه اجرا می شود.
ولی فایل exe تولید شده توسط پست قبلی اینجوری نیست و کلا فقط یک نمونه از برنامه اجرا می شود.

سار
سه شنبه 18 دی 1386, 14:50 عصر
جالبه، یعنی کد شما به فایل بستگی داره ولی کد beh_develop (http://barnamenevis.org/forum/member.php?u=52381) که من هم تا کنون از آن استفاده می کردم به فایل فیزیکی بستگی نداره.
حالا تو بخش VB.Net هم دوستمون shahrdar (http://barnamenevis.org/forum/member.php?u=26022) در این (http://barnamenevis.org/forum/showpost.php?p=447106&postcount=8) پست روش زیر رو پیشنهاد دادن


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 رو انتخاب کنید
من همیشه از این کد استفاده میکنم

تا حالا شد سه روش، شما اطلاعی در مورد این روش آخر دارید؟

hassan razavi
سه شنبه 18 دی 1386, 15:11 عصر
دقیقا سار عزیز ،تفاوتی که من پیدا کردم همین وابسته بودن به فایل مجری برنامه بود.
خیر دوست عزیز. من اصلا معادل همچین مسیری را در #C پیدا نمی کنیم (View Application Events ) . شما تونستید این روش رو تست کنید؟

سار
سه شنبه 18 دی 1386, 16:04 عصر
نه متاسفانه.
راستش من VB ندارم، فکر کردم مال اونه!!!!

regbyte
یک شنبه 23 تیر 1387, 15:02 عصر
روشی که در VB ذکر شد:


e.BringToForeground = True

با CheckBox:
Make single instance application
چه فرقی داره !!!؟

آیا در #C معادل این CheckBox وجود داره؟