Solved

C# Detect for start application twice time (advanced)

Posted on 2009-07-02
4
887 Views
Last Modified: 2013-12-17
Hi experts!

  Im using C# 2008 , WinForm NET 2. I have application, which if is started with command parameters start different forms (and this form stay open all the time and can not be change).
I want to make sure that this application can not be started twice on 1 computer. This is simple, but not in this case. Because in fact application is count if is started twice with same parametyr. (possible option are only 3 and are static text like param1 or param2 or param3 How to do this ?

 In COM world I will ask and get for caption of application and will understand have or not have already started this application. But how I can do this via NET?

 I can save let say in registry this info, but if my application fail it will not save that is close and next time is possible to be unable to start J

 I need this  to keep from people error with started twice time my application.
0
Comment
Question by:dvplayltd
4 Comments
 
LVL 53

Accepted Solution

by:
Dhaest earned 500 total points
ID: 24770285
Ensuring that only a single instance of a .NET application is running
http://www.ai.uga.edu/~mc/SingleInstance.html

[STAThread]

    static void Main()                  // args are OK here, of course

    {

        bool ok;

        m = new System.Threading.Mutex(true, "YourNameHere", out ok);
 

        if (! ok)

        {

            MessageBox.Show("Another instance is already running.");

            return;

        }
 

        Application.Run(new Form1());   // or whatever was there
 

        GC.KeepAlive(m);                // important!

    }

Open in new window

0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 24770350
0
 
LVL 9

Expert Comment

by:Rahul Goel
ID: 24770497
Hey this will help you.
http://en.csharp-online.net/Application_Architecture_in_Windows_Forms_2.0%E2%80%94Single-Instance_Detection_and_Management

you can use WindowsFormsApplicationBase class and check whether you appl has got different forms or not
0
 
LVL 2

Expert Comment

by:retorikci
ID: 24770924
in your Program.cs try this code.
in this example we avoid Login twice times.
using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.Runtime.InteropServices; 
 

    //static class Program

    //{

    //    /// <summary>

    //    /// The main entry point for the application.

    //    /// </summary>

    //    [MTAThread]

    //    static void Main()

    //    {

    //        try

    //        {

    //            Application.Run(new frmLogin());

    //        }

    //        catch (Exception ex)

    //        {

    //            MessageBox.Show(ex.ToString());

    //        }

    //    }

    //}
 

    static class Program

    {

        // need this for single instance detection 

        [DllImport("coredll.dll")]

        private static extern int FindWindow(string lpClassName, string lpWindowName);

        [DllImport("coredll.dll")]

        private static extern bool SetForegroundWindow(int hwnd);

 

        const string appName = "Login";

        const int ALREADY_EXISTS = 183;

        

        static void Main()

        {

            startTicks = Environment.TickCount;
 

            using (AppExecutionManager execMgr = new AppExecutionManager(appName))

            {

                if (execMgr.IsFirstInstance)

                    Application.Run(new frmLogin());

                else

                {

                    int hWnd = FindWindow(null, appName);

                    SetForegroundWindow(hWnd); 

                }

            }

        }

        internal static int startTicks;

    }

Open in new window

0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

A basic question.. “What is the Garbage Collector?” The usual answer given back: “Garbage collector is a background thread run by the CLR for freeing up the memory space used by the objects which are no longer used by the program.” I wondered …
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now