By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,846 Members | 1,211 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,846 IT Pros & Developers. It's quick & easy.

Identify multiple running instances of an application

P: n/a
Hi, I wrote an app in .Net and I whant only 1 instance of this app open for
the user; the user open my app, do some works and try to open another
instance of my app, I whant to show a message to user to inform him that only
one instance is permit and then close the second instance after that.

I am able to do this when the user run the application on his PC whit this :

Process.GetProcessesByName(Process.GetCurrentProce ss.ProcessName)

and if I found the name of my app in the returned collection, I display the
message and close the seconde instance.

The problem now: if my application is used by Remote session on a central PC
who others users can also open my application at the same time, I would like
to let the others users open my app. The only one contrainte is one instance
by user. The code I used does not work in this scenario.

Does anyone have idea to solution this ?

Thanks a lot
Michel
Mar 13 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
If you know the name of the process you can do something like this

using System.Diagnostics;
if (Process.GetProcessesByName(processName).Length > 0)
return true;
// where processName is the process you are looking for.
The other option is; you can use a Mutex and verify if the Mutex already
exists.

--------------------
Thread-Topic: Identify multiple running instances of an application
thread-index: AcZGp1JCRsO2yAK6TdOQEauDPYg6Nw==
X-WBNR-Posting-Host: 66.38.186.253
From: =?Utf-8?B?TWljaGVs?= <Mi****@discussions.microsoft.com>
Subject: Identify multiple running instances of an application
Date: Mon, 13 Mar 2006 06:06:28 -0800
Lines: 21
Message-ID: <32**********************************@microsoft.co m>
MIME-Version: 1.0
Content-Type: text/plain;
charset="Utf-8"
Content-Transfer-Encoding: 7bit
X-Newsreader: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830
Newsgroups: microsoft.public.dotnet.general
Path: TK2MSFTNGXA03.phx.gbl
Xref: TK2MSFTNGXA03.phx.gbl microsoft.public.dotnet.general:191032
NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
X-Tomcat-NG: microsoft.public.dotnet.general

Hi, I wrote an app in .Net and I whant only 1 instance of this app open forthe user; the user open my app, do some works and try to open another
instance of my app, I whant to show a message to user to inform him that onlyone instance is permit and then close the second instance after that.

I am able to do this when the user run the application on his PC whit this :
Process.GetProcessesByName(Process.GetCurrentProc ess.ProcessName)

and if I found the name of my app in the returned collection, I display themessage and close the seconde instance.

The problem now: if my application is used by Remote session on a central PCwho others users can also open my application at the same time, I would liketo let the others users open my app. The only one contrainte is one instanceby user. The code I used does not work in this scenario.

Does anyone have idea to solution this ?

Thanks a lot
Michel


--

Thank You,
Nanda Lella,

This Posting is provided "AS IS" with no warranties, and confers no rights.

Mar 13 '06 #2

P: n/a
Hi Nanda, thank you for your answer. Your code will work but the problem I
have is how to find the process used by a specific user. Many users can
connect by remote sessions on a computer to run my application. I whant to
restrict 1 instance by user. The code you suggest to me can find the process
(my app) of another user connected remotly to the computer, and I don't whant
it... is it possible to do this ? I don't know.... :(

thank you for your help....

Michel

"Nanda Lella[MSFT]" wrote:
If you know the name of the process you can do something like this

using System.Diagnostics;
if (Process.GetProcessesByName(processName).Length > 0)
return true;
// where processName is the process you are looking for.
The other option is; you can use a Mutex and verify if the Mutex already
exists.

--------------------
Thread-Topic: Identify multiple running instances of an application
thread-index: AcZGp1JCRsO2yAK6TdOQEauDPYg6Nw==
X-WBNR-Posting-Host: 66.38.186.253
From: =?Utf-8?B?TWljaGVs?= <Mi****@discussions.microsoft.com>
Subject: Identify multiple running instances of an application
Date: Mon, 13 Mar 2006 06:06:28 -0800
Lines: 21
Message-ID: <32**********************************@microsoft.co m>
MIME-Version: 1.0
Content-Type: text/plain;
charset="Utf-8"
Content-Transfer-Encoding: 7bit
X-Newsreader: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830
Newsgroups: microsoft.public.dotnet.general
Path: TK2MSFTNGXA03.phx.gbl
Xref: TK2MSFTNGXA03.phx.gbl microsoft.public.dotnet.general:191032
NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
X-Tomcat-NG: microsoft.public.dotnet.general

Hi, I wrote an app in .Net and I whant only 1 instance of this app open

for
the user; the user open my app, do some works and try to open another
instance of my app, I whant to show a message to user to inform him that

only
one instance is permit and then close the second instance after that.

I am able to do this when the user run the application on his PC whit this

:

Process.GetProcessesByName(Process.GetCurrentProc ess.ProcessName)

and if I found the name of my app in the returned collection, I display

the
message and close the seconde instance.

The problem now: if my application is used by Remote session on a central

PC
who others users can also open my application at the same time, I would

like
to let the others users open my app. The only one contrainte is one

instance
by user. The code I used does not work in this scenario.

Does anyone have idea to solution this ?

Thanks a lot
Michel


--

Thank You,
Nanda Lella,

This Posting is provided "AS IS" with no warranties, and confers no rights.

Mar 14 '06 #3

P: n/a
Hello Michel,

If you use Mutex then you can restrict a single instance per user.
Also you can create a global Mutex to restrict single instance per machine.

using System.Threading;
Mutex processMutex = new Mutex(false,"Your Application Name");
if (processMutex.WaitOne(0, false) == false)
{
//Multiple intstance detected.
}//if

//Approach 2
using System.Threading;
bool isFirstInstance;
Mutex processMutex = new Mutex(true, "Your Application Name", out
isFirstinstance);
if(!isFirstInstance)
{
//Multiple instance detected.
}//

//If you plan to do one instance per machine create the mutex this way
Mutex processMutex = new Mutex(true, "Global\\" + "Your Application Name",
out isFirstinstance);

The important point to note is dont forget to release/dispose the mutex
when there is an error or when you are done with the applications. Best
place is to do the mutex release in the finally block.
if (processMutex != null)
{
processMutex.Close();
processMutex = null;
}//if
Hope this helps,
--------------------
Thread-Topic: Identify multiple running instances of an application
thread-index: AcZHbJn8ROGT6iGXT1KtfXVgY7xLYQ==
X-WBNR-Posting-Host: 66.38.186.253
From: =?Utf-8?B?TWljaGVs?= <Mi****@discussions.microsoft.com>
References: <32**********************************@microsoft.co m> <xS**************@TK2MSFTNGXA03.phx.gbl>Subject: RE: Identify multiple running instances of an application
Date: Tue, 14 Mar 2006 05:38:39 -0800
Lines: 86
Message-ID: <79**********************************@microsoft.co m>
MIME-Version: 1.0
Content-Type: text/plain;
charset="Utf-8"
Content-Transfer-Encoding: 7bit
X-Newsreader: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830
Newsgroups: microsoft.public.dotnet.general
Path: TK2MSFTNGXA03.phx.gbl
Xref: TK2MSFTNGXA03.phx.gbl microsoft.public.dotnet.general:191137
NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
X-Tomcat-NG: microsoft.public.dotnet.general

Hi Nanda, thank you for your answer. Your code will work but the problem I
have is how to find the process used by a specific user. Many users can
connect by remote sessions on a computer to run my application. I whant to
restrict 1 instance by user. The code you suggest to me can find the process(my app) of another user connected remotly to the computer, and I don't whantit... is it possible to do this ? I don't know.... :(

thank you for your help....

Michel

"Nanda Lella[MSFT]" wrote:
If you know the name of the process you can do something like this

using System.Diagnostics;
if (Process.GetProcessesByName(processName).Length > 0)
return true;
// where processName is the process you are looking for.
The other option is; you can use a Mutex and verify if the Mutex already
exists.

--------------------
>Thread-Topic: Identify multiple running instances of an application
>thread-index: AcZGp1JCRsO2yAK6TdOQEauDPYg6Nw==
>X-WBNR-Posting-Host: 66.38.186.253
>From: =?Utf-8?B?TWljaGVs?= <Mi****@discussions.microsoft.com>
>Subject: Identify multiple running instances of an application
>Date: Mon, 13 Mar 2006 06:06:28 -0800
>Lines: 21
>Message-ID: <32**********************************@microsoft.co m>
>MIME-Version: 1.0
>Content-Type: text/plain;
> charset="Utf-8"
>Content-Transfer-Encoding: 7bit
>X-Newsreader: Microsoft CDO for Windows 2000
>Content-Class: urn:content-classes:message
>Importance: normal
>Priority: normal
>X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830
>Newsgroups: microsoft.public.dotnet.general
>Path: TK2MSFTNGXA03.phx.gbl
>Xref: TK2MSFTNGXA03.phx.gbl microsoft.public.dotnet.general:191032
>NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250
>X-Tomcat-NG: microsoft.public.dotnet.general
>
>Hi, I wrote an app in .Net and I whant only 1 instance of this app open

for
>the user; the user open my app, do some works and try to open another
>instance of my app, I whant to show a message to user to inform him
that only
>one instance is permit and then close the second instance after that.
>
>I am able to do this when the user run the application on his PC whit
this :
>
>Process.GetProcessesByName(Process.GetCurrentProc ess.ProcessName)
>
>and if I found the name of my app in the returned collection, I display

the
>message and close the seconde instance.
>
>The problem now: if my application is used by Remote session on a
central PC
>who others users can also open my application at the same time, I would

like
>to let the others users open my app. The only one contrainte is one

instance
>by user. The code I used does not work in this scenario.
>
>Does anyone have idea to solution this ?
>
>Thanks a lot
>Michel
>


--

Thank You,
Nanda Lella,

This Posting is provided "AS IS" with no warranties, and confers no rights.


--

Thank You,
Nanda Lella,

This Posting is provided "AS IS" with no warranties, and confers no rights.

Mar 14 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.