الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل استطيع تشغيل نسخه واحده فقط للبرنامج في الوقت نفسه

بدأه mamababadada في 24 ديسمبر 2010 · 5 رد · 748 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الاعزاء قمت بعمل برنامج بالسي شارب الان البرنامج يستطيع المستخدم ان يشغله اكثر من مره في حال كرر عملية الضغط بزر الفأرة عليه هل استطيع ان اجعل نسخه وحده فقط هي التي تشتغل في الوقت نفسه ؟

Many of life’s failures are people who did not realize how close they were to success when they gave up

Thomas Edison

#2

انا افضل استخدام mutex ارجو ان ينفعك المثال التالي

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
bool createdNew = true;
using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew))
{
if (createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
else
        {
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(current.ProcessName))
{
if (process.Id != current.Id)
{
SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}
}

تحياتي

#3

طريقة أخرى دون استخدام دوال الـ API

ضع الكود التالي داخل الدالة Main الموجودة في الملف Prpgram.cs ( احذف الكود الموجود سابقا داخل الدالة )

            string proc = Process.GetCurrentProcess().ProcessName;
            Process[] processes = Process.GetProcessesByName(proc);
            if (processes.Length == 1)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {
                MessageBox.Show("نسخة من البرنامج تعمل بالذاكرة!", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            }

عدل العبارة :

Application.Run(new Form1());

لما يناسبك إن كان البرنامج لايبدأ من الفورم المسمى Form1

#4

جزاكم الله الف خير تحقق المطلوب .

احتاج فقط كود اغلاق او انهاء بدل عرض الرسالة

MessageBox.Show("نسخة من البرنامج تعمل بالذاكرة!", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);

استفسار اخير رغم انه يحتاج وضعه بموضوع جديد لكن فيكم الخير والبركه الان البرنامج النهائي اجده في مجلد

bin و مجلد obj والحقيقه انا استخدم الموجود بمجلد bin فهل تعتبر هذه النسخه هي المطلوبه بالملفات الموجوده حوله لاضعها على سيدي وتشغيلها لدى العملاء ؟ اما هناك Setup wizard يقوم بعملية اغلاق التطبيق وتجهيزه لتسويقه ... ؟؟!!!!!!

تم تعديل هذه المشاركة بواسطة mamababadada في 24 ديسمبر 2010 في 17:38

Many of life’s failures are people who did not realize how close they were to success when they gave up

Thomas Edison

#5

إذا لم تكن تريد عرض الرسالة احذف عبارة else ومابعدها ( الموجود داخل الأقواس المعكوفه {} ) وسيقوم البرنامج بعدم تشغيل نسخة أخرى لعدم تحقق الشرط .

لكن الأفضل أن تترك البرنامج يعرض الرسالة لأن المستخدم قد لا يعلم بتشغيل البرنامج في الخلفية في بعض الحالات .

بالنسبة للبرنامج فكما تفضلت ستجده في المجلد bin

بالمجلد Debug أو Release حسب اعدادات مشروعك

وعند نقل البرنامج يحتاج العميل لتثبيت الـ Framework الذي قمت بتصميم البرنامج به

تحياتي

تم تعديل هذه المشاركة بواسطة hfsh80 في 24 ديسمبر 2010 في 18:29

#6

000الف شكرا لك .

Many of life’s failures are people who did not realize how close they were to success when they gave up

Thomas Edison

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…