سلام من میخوام وقتی برنامه در حال اجرا شدنه دیگه نسخه دیگه ای ازش اجرا نشه...مثلا کاربر نتونه دوباره با باز کردنش اجرا کنه...
تو لیست process بگرده که اگه در حال اجرا شده اجرا نشه...
مرسی
سلام من میخوام وقتی برنامه در حال اجرا شدنه دیگه نسخه دیگه ای ازش اجرا نشه...مثلا کاربر نتونه دوباره با باز کردنش اجرا کنه...
تو لیست process بگرده که اگه در حال اجرا شده اجرا نشه...
مرسی
این کد را در قسمت Program.cs در تابع Main بنویس.
int count = GetNumberOfRunningInstances();
if (count <= 1)
{
Application.Run(new Form1());
}
else
{
System.Windows.Forms.MessageBox.Show("Another instance of this program is already running. Two instances cannot run at the same time", "Already running", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Application.Exit();
}
مرسی دوست عزیز...فقط وقتی دیباگ میکنم خطا زیر رو میده:
error CS0103: The name 'GetNumberOfRunningInstances' does not exist in the current context
از namespace خاصی use کردی؟
از این سه استفاده کردم
using System;
using System.Collections.Generic;
using System.Windows.Forms;
خب اینا که بصورت پیشفرض using میشه پس چرا خطا میده؟
مثله اینکه GetNumberOfRunningInstances یه متده...من در بارش سرچ کردم اینو پیدا کردم:
privatestaticint GetNumberOfRunningInstances()
{
int runcount = 0;
string[] parts = System.Reflection.Assembly.GetExecutingAssembly().Location.Split("\\".ToCharArray());
string appName = parts[parts.Length - 1];
string query = "select name from CIM_Process where name = '" + appName + "'";
System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query);
foreach (System.Management.ManagementObject item in searcher.Get())
{
runcount++;
}
return runcount;
}
اما این کد هم کار نمیکنه چون احتمالا از نیم اسپیس خاصی استفاده میکنه
یکی کمک کنهههههههههههههه!
راه حل مشکل شما در الگوی Singleton است. لطفا جستجو بفرمایید: الگوهای طراحی- Singleton
موفق باشید
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
سلام
آقا شرمنده اصلا حواس این حقیر به این تابع نبود.
برای همین کل کلاس Program .cs را براتون می گذارم. انشاالله که مرا عفو کنید.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Likeable_Windows
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
int count = GetNumberOfRunningInstances();
if (count <= 1)
{
Application.Run(new Form1());
}
else
{
System.Windows.Forms.MessageBox.Show("Another instance of this program is already running. Two instances cannot run at the same time", "Already running", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Application.Exit();
}
}
private static int GetNumberOfRunningInstances()
{
//yank off the appname.exe from the assemblies location
string[] parts = System.Reflection.Assembly.GetExecutingAssembly(). Location.Split("\\".ToCharArray());
string appName = parts[parts.Length - 1];
//build the wmi query
string query = "select name from CIM_Process where name = '" + appName + "'";
//load up the managementobjectsearcher with the query
System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query);
int runcount = 0;
//iterate the collection and (which should only have 1 or 2 instances, and if 3 then its already running
//1 instaces would be itself, 2 would be self and the other
foreach (System.Management.ManagementObject item in searcher.Get())
{
runcount++;
if (runcount > 1) break; //only need to know if there is more then self running
}
return runcount;
}
}
}
ManagementObjectSearcher این تابعی که استفاده کردی ایا رفرنسی خاصی استفاده کردی لطفا راهنمای کنید
این کد درسته. ولی به System.Managment ایراد می گیره. من فکر کردم خودتون این رفرنس را اضافه می کنید.
ولی اشکال نداره.
این نمونه برنامه.
خب دوست عزیز این برنامه ای که شما نوشتید با .NET 2 نوشته شده و من الان از .NET 3.5 استفاده میکنم...
system manegment رو به refrence اضافه کردم اما کار نمیکنه...فکر کنم بخاطر نسخه دات نت باشه
ممنون