PDA

View Full Version : عدم باز شدن مجدد برنامه



amirrr3
شنبه 06 اسفند 1390, 18:28 عصر
سلام دوستان
چطور میشه کاری کرد که وقتی یه نسخه از برنامه باز هست زمانی که دوباره برنامه رو می خوایم باز کنیم یه پیغام بده و از این کار جلوگیری کنه؟
ممنون میشم

Mahmoud Zaad
شنبه 06 اسفند 1390, 18:52 عصر
سلام
توی فایل Program.cs اون قسمتی که به شکل (Application.Run(new Form1());)هست رو کامنت کن و بجاش کدهای زیر رو بنویس:


bool createdNew;
// To prevent the program to be started twice
///Create new mutex
System.Threading.Mutex appMutex = new System.Threading.Mutex(true, Application.ProductName, out createdNew);
///if creation of mutex is successful
if (createdNew)
{
Application.Run(new Form1());
appMutex.ReleaseMutex();
}
else
{
/// if the app's already running
string msg = String.Format("The Program \"{0}\" is already running", Application.ProductName);
MessageBox.Show(msg, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}

Sal_64
شنبه 24 تیر 1391, 16:52 عصر
سلام من از این کد در برنامم استفاده کردم . اما حالا نسخه اصلی کمی تغییر دادم و الان باید هم برنامه اصلی و هم نسخه تغییر یافته همزمان با هم کار کنند. اما این کد اجازه باز شدن همزمان هر دو برنامه نمی دهد . چیکار باید کرد . تشکر

barnamenevisjavan
شنبه 24 تیر 1391, 20:38 عصر
يه كليد توي رجيستري بساز بعد توي لود فرم بنويس كه به اون كليد مقدار يك رو بده و يه شرط بنويس كه اگه مقدار كليد 1 بود برنامه اجرا نشه و بلافاصله بسته بشه و توي رويداد بستن فرم هم بيا اون كليد رو مقدارش رو 0 كن و باز توي لود فرم شرط بزار كه اگه 0 بود برنامه اجرا بشه

Sal_64
شنبه 24 تیر 1391, 21:27 عصر
يه كليد توي رجيستري بساز بعد توي لود فرم بنويس كه به اون كليد مقدار يك رو بده و يه شرط بنويس كه اگه مقدار كليد 1 بود برنامه اجرا نشه و بلافاصله بسته بشه و توي رويداد بستن فرم هم بيا اون كليد رو مقدارش رو 0 كن و باز توي لود فرم شرط بزار كه اگه 0 بود برنامه اجرا بشه

این مطلب در جواب سوال من بود ؟ ! اگه نیاز به توضیح بیشتر هست بگید

mousa1992
شنبه 24 تیر 1391, 22:01 عصر
يه كليد توي رجيستري بساز ....

من از این روش قبلا استفاده کردم مشکلش اینه که اگه برنامه به طور غیر معمول بسته بشه باید بری از رجیستری مقادیرو درست کنی
زیاد کار جالبی نیست راه دیگه ای سراغ دارن دوستان ؟
تشکر

Mahmoud.Afrad
یک شنبه 25 تیر 1391, 00:50 صبح
سلام من از این کد در برنامم استفاده کردم . اما حالا نسخه اصلی کمی تغییر دادم و الان باید هم برنامه اصلی و هم نسخه تغییر یافته همزمان با هم کار کنند. اما این کد اجازه باز شدن همزمان هر دو برنامه نمی دهد . چیکار باید کرد . تشکر
همونطور که میبینید از ProductName استفاده شده و طبق اون تصمیم گیری میشه. باید ProductName برنامه اصلی با برنامه تغییریافته متفاوت باشه. از طریق properties تب application قسمت assembly information میتونید مشخصات برنامه رو تغییر بدید از جمله product .

hamed_hossani
یک شنبه 25 تیر 1391, 00:54 صبح
سلام
Single Instance Application in C# را در codeProject سرچ کن!

مرتضی تقدمی
یک شنبه 25 تیر 1391, 01:28 صبح
سلام



string ModuleName = null;
string ProcessName = null;
ModuleName = Process.GetCurrentProcess().MainModule.ModuleName;
ProcessName = System.IO.Path.GetFileNameWithoutExtension(ModuleN ame);
System.Diagnostics.Process[] Proc = null;
Proc = Process.GetProcessesByName(ProcessName);
if (Proc.Length > 1)
return true;
else
return false;


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

Sal_64
یک شنبه 25 تیر 1391, 14:13 عصر
همونطور که میبینید از ProductName استفاده شده و طبق اون تصمیم گیری میشه. باید ProductName برنامه اصلی با برنامه تغییریافته متفاوت باشه. از طریق properties تب application قسمت assembly information میتونید مشخصات برنامه رو تغییر بدید از جمله product .

سلام از همه دوستان ممنونم. کد من اینشکلی بود
bool ok; Mutex m = new Mutex(true, &YourNameHere1&, out ok); if (!ok) { return; } تنها با تغییر "YourNameHere1"به نام دیگه ای مورد حل شد -مرورگرم ایراد داره به همین دلیل پاسخ هام یه ذره درهم بر هم میشن- تشکر