نمایش نتایج 1 تا 8 از 8

نام تاپیک: یک نکته کوچک :: چگونه فقط یک نسخه از برنامه اجرا بشه !!!!

  1. #1
    کاربر دائمی آواتار Mahdavi
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    ایران - میگن تهرون
    پست
    606

    یک نکته کوچک :: چگونه فقط یک نسخه از برنامه اجرا بشه !!!!

    با سلام
    بعضی وقتها می خواهیم فقط یک نسخه از برنامه ما اجرا شود .

    برای این کار ابتدا تمام پروسسهای ویندوز را چک می کنیم تا اگه برنامه ای با همان نام پیدا شد ، محل اجرای آن را چک میکند و ......

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Reflection;

    public class OneInstnace
    {
    [STAThread]
    public static void Main()
    {
    //Get the running instance.
    Process instance = RunningInstance();
    if (instance == null)
    {
    //There isn't another instance, show our form.
    Application.Run (new Form());
    }
    else
    {
    //There is another instance of this process.
    HandleRunningInstance(instance);
    }
    }
    public static Process RunningInstance()
    {
    Process current = Process.GetCurrentProcess();
    Process[] processes = Process.GetProcessesByName (current.ProcessName);

    //Loop through the running processes in with the same name
    foreach (Process process in processes)
    {
    //Ignore the current process
    if (process.Id != current.Id)
    {
    //Make sure that the process is running from the exe file.
    if (Assembly.GetExecutingAssembly().Locat ion.Replace("/", "\\") ==
    current.MainModule.FileName)
    {
    //Return the other process instance.
    return process;
    }
    }
    }

    //No other instance was found, return null.
    return null;
    }


    public static void HandleRunningInstance(Process instance)
    {
    //Make sure the window is not minimized or maximized
    ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

    //Set the real intance to foreground window
    SetForegroundWindow (instance.MainWindowHandle);
    }

    [DllImport("User32.dll")]

    private static extern bool ShowWindowAsync(
    IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")] private static extern bool
    SetForegroundWindow(IntPtr hWnd);
    private const int WS_SHOWNORMAL = 1;
    }


    منبع : سایت c-sharpcorner

  2. #2

    Question اشکال در کد شما

    نقل قول نوشته شده توسط Mahdavi
    با سلام
    بعضی وقتها می خواهیم فقط یک نسخه از برنامه ما اجرا شود .

    برای این کار ابتدا تمام پروسسهای ویندوز را چک می کنیم تا اگه برنامه ای با همان نام پیدا شد ، محل اجرای آن را چک میکند و ......
    ببخشید استاد این کد شما کار نمی کنه ( تو برنامه های خودتون کار می کنه ؟)
    (در ضمن قبل از استفاده از این کد وقتی برنامه ران بود و دوباره کمپایل می کردی دانت نت ارور می داد اما با این کد خود دانت نت هم غات زد و چند تا از برنامه رو باز می کنه )

    لطفا راهنمایی کنید یا اگه اصلاح شدش رو دارید بزارید
    با تشکر
    احمد سامعی

  3. #3
    دوست من، روش شما عالیه، ولی من روش استفاده از mutex رو ترجیح می دم. البته روش شما یه سری مزایا نسبت به mutex داره.

  4. #4
    کاربر دائمی آواتار leilav_1984
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    تهران
    پست
    307
    نقل قول نوشته شده توسط محمد میرمصطفی مشاهده تاپیک
    دوست من، روش شما عالیه، ولی من روش استفاده از mutex رو ترجیح می دم. البته روش شما یه سری مزایا نسبت به mutex داره.
    لطفا راجع به این mutex راهنمایی بفرمایید

  5. #5
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    به لینک زیر مراجعه کنید، مطالب خوبی رو می بینی:
    http://us.geocities.com/noxcupid/
    http://us.geocities.com/noxcupid/2_18.htm

  6. #6
    با سلام مطلب شما جالب بود و به درد من ه م خیلی می خوره . ولی من یه مشکل دیگل دیگه هم دارم:

    من میخوام یه نسخه از Application اجرا بشه ولی چند تا Dll دارم که میخوام فقط یک بار اجرا بشن . لطفا اگه

    می تونین کمکم کنید چون خیلی به جواب این سوال احتیاج دارم.

  7. #7
    منظورتون از اینکه Dll فقط یکبار اجرا بشه چیه ؟ واضحتر توضیح بدبد که این Dll تون چی هست و چه کار میکنه و چه جوری پیاده سازی شده.
    چندین راه وجود داره. می تونید از الگوریتم Singleton یا متدهای استاتیک استفاده کنید.
    فقط باید روشن تر توضیح بدهید

  8. #8
    مثل اینکه با هر بار اجرای App تمام Dll های استفاده شده یک بار برای Applicaion تازه باز شده اجرا می شوند . منظورم یک کپی از آنها است نه خود آنها به همین دلیل الگوریتم singleton و متدهای static هم هیچ کمکی نمیکنند. حالا من میخوام که این Dll ها به ازای هر تعداد app باز شده فقط وفقط یک بار در حافظه بار شوند.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •