PDA

View Full Version : جلوگیری از اجرای مجدد نرم افزار



aliramazani
پنج شنبه 11 تیر 1394, 17:12 عصر
اگر برنامه را یکبار باز کردیم وقتی کاربر دوباره روی آیکن نرم افزار کلیک کرد مجددا نرم افزار باز نشه بلکه همون برنامه که باز بود دوباره بیاد بالا و نشون کاربر داده بشه نه اینکه یکی دیگه هم باز بشه.

aliramazani
پنج شنبه 11 تیر 1394, 17:21 عصر
bool ok; Mutex m = new Mutex(true, " ", out ok);
if (!ok)
{

MessageBox.Show("برنامه در حاله اجرا است!!");
return;
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}
این کد خوبه ولی میخوام اگه باز بود به جای مسیج باکس برنامه بیاد بالا

aliramazani
پنج شنبه 11 تیر 1394, 17:25 عصر
سلام من می خوام وقتی نرم افزارم اجرا هست کاربر نتونه دوباره اونو اجرا کنه
اینو بلدم
حالا می خوام وقتی کاربر دوباره نرم افزار رو اجرا کرد همون اجرای قبلی که توی Notify هست بیاد بالا

در حقیقت یک چیزی می خوام مثل IDM
وقتی IDM اجرا هست یک بار دیگه اجراش کنید اونی که دوباره باز کردید بسته میشه و یک جوری به IDM باز می فهمونه که خودشو نشون بده

نمی دونم تونستم منظورم رو بفهمونم یا نه؟

بهتره اینجوری بگم
کاربر دو بار فایل EXE من رو باز کرده من می خوام از این یکی یک جوری با اون یکی ارتباط برقرار کنم:عصبانی++:

پیشاپیش ممنون

محمد آشتیانی
پنج شنبه 11 تیر 1394, 18:07 عصر
سلام
این مطالب رو مطالعه بفرمائید.
http://www.codeproject.com/Articles/4430/Single-Instance-Application-in-C
و
http://www.codeproject.com/Articles/32908/C-Single-Instance-App-With-the-Ability-To-Restore



موفق باشید.

محمد رضا فاتحی
یک شنبه 14 تیر 1394, 11:32 صبح
سلام به همه...
من با این تکه کد از اجرای چندباره جلوگیری می کنم و درست هم جواب می ده

bool ok;
Mutex m = new Mutex(true, "BarBari", out ok);
if (!ok)
{

FarsiMessage.Show("برنامه در حال اجرا می باشد", "", FarsiMessageBoxButtons.OK,
FarsiMessageBoxIcons.Error);
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form2()); // or whatever was there
GC.KeepAlive(m); // important!


فقط یه مشکلی داره اینه که وقتی برنامه رو با کد Application.Restart ریست می کنم دفعه اول خطا میده و کاربر مجبوره دوباره خودش برنامه رو با آیکن اجرا کنه... راه حلی داره؟

Mahmoud Zaad
یک شنبه 14 تیر 1394, 12:24 عصر
سلام به همه...
من با این تکه کد از اجرای چندباره جلوگیری می کنم و درست هم جواب می ده

bool ok;
Mutex m = new Mutex(true, "BarBari", out ok);
if (!ok)
{

FarsiMessage.Show("برنامه در حال اجرا می باشد", "", FarsiMessageBoxButtons.OK,
FarsiMessageBoxIcons.Error);
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form2()); // or whatever was there
GC.KeepAlive(m); // important!


فقط یه مشکلی داره اینه که وقتی برنامه رو با کد Application.Restart ریست می کنم دفعه اول خطا میده و کاربر مجبوره دوباره خودش برنامه رو با آیکن اجرا کنه... راه حلی داره؟
سلام
ظاهراً مشکل از خط زیر هست چون بدون این خط، کدها بدون مشکل اجرا میشن.
GC.KeepAlive(m); // important!

محمد رضا فاتحی
یک شنبه 14 تیر 1394, 12:30 عصر
ممنون از جوابت ولی متاسفانه کار نکرد