What is the most robust way to implement single-instancing for a Windows
app? I'm aware of the GetProcessByNam e method and the Mutex method. I've
GetProcessByNam e isn't very robust. What happens if the app crashes and
it's using the Mutex method? I don't want it to get in a situation where
the Mutex prevents the app. from starting when it really is ok to start. Is
the Mutex method the most robust? Any others?
Using .NET 2.0 and C#. 9 5194
Jen,
If the app crashes, the Mutex should be disposed of, assuming that you
are using a using statement or a try/finally statement where you are calling
Dispose on the Mutex. Short of an error in the CLR, a regular exception in
this case will not cause the Mutex to hang around.
You might also want to check out this thread, which points to using the
WindowsApplicat ionBase class in the Microsoft.Visua lBasic namespace which
handles exactly what you are looking for.
Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard. caspershouse.co m
"Jen" <no**@nowhere.c omwrote in message
news:%2******** ********@TK2MSF TNGP05.phx.gbl. ..
What is the most robust way to implement single-instancing for a Windows
app? I'm aware of the GetProcessByNam e method and the Mutex method. I've
GetProcessByNam e isn't very robust. What happens if the app crashes and
it's using the Mutex method? I don't want it to get in a situation where
the Mutex prevents the app. from starting when it really is ok to start.
Is the Mutex method the most robust? Any others?
Using .NET 2.0 and C#.
On Sun, 25 Mar 2007 20:26:46 -0700, Nicholas Paldino [.NET/C# MVP]
<mv*@spam.guard .caspershouse.c omwrote:
If the app crashes, the Mutex should be disposed of, assuming that
you are using a using statement or a try/finally statement where you are
calling Dispose on the Mutex. Short of an error in the CLR, a regular
exception in this case will not cause the Mutex to hang around.
It should be disposed of regardless, since even in native Win32, Windows
will dispose of the application's handle to the mutex when the application
terminates (normally or abnormally).
Pete
I'm trying the Mutex method. It seems to work on my development system but
on a test machine it doesn't prevent multiple instances. I'm doing
something like this:
bool firstInstance;
Mutex mutex = new Mutex(false, "klsjflksdjfkls djflkd", out firstInstance);
if (!firstInstance )
return;
Jen <no**@nowhere.c omwrote:
I'm trying the Mutex method. It seems to work on my development system but
on a test machine it doesn't prevent multiple instances. I'm doing
something like this:
bool firstInstance;
Mutex mutex = new Mutex(false, "klsjflksdjfkls djflkd", out firstInstance);
if (!firstInstance )
return;
See http://pobox.com/~skeet/csharp/faq/#...ation.instance
(The paragraph starting with "One thing to beware of" describes your
situation.)
--
Jon Skeet - <sk***@pobox.co m> http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
"Jen" <no**@nowhere.c omwrote in message news:%2******** ********@TK2MSF TNGP05.phx.gbl. ..
What is the most robust way to implement single-instancing for a Windows
app? I'm aware of the GetProcessByNam e method and the Mutex method. I've
GetProcessByNam e isn't very robust. What happens if the app crashes and
it's using the Mutex method? I don't want it to get in a situation where
the Mutex prevents the app. from starting when it really is ok to start. Is
the Mutex method the most robust? Any others?
Using .NET 2.0 and C#.
Do as Nicholas said and apply the using pattern on the Mutex...
...
bool firstInstance;
using (Mutex AppMutex = new Mutex(true, new
Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"). ToString(), out firstInstance))
{
if (firstInstance= = true)
{
// run your program code from here
}
} // end using scope, mutex released here.
...
Willy.
On Mar 25, 7:07 pm, "Jen" <n...@nowhere.c omwrote:
What is the most robust way to implement single-instancing for a Windows
app? I'm aware of the GetProcessByNam e method and the Mutex method. I've
GetProcessByNam e isn't very robust. What happens if the app crashes and
it's using the Mutex method? I don't want it to get in a situation where
the Mutex prevents the app. from starting when it really is ok to start. Is
the Mutex method the most robust? Any others?
Using .NET 2.0 and C#.
A probable work around if you intend to avoid mutex, Give your main
form a unique name that has *good* chances of being unique and then
use the FindWindow API to retrieve its window handle.
You can check for the existence of the instance in the entry point of
your application and prevent from creating an instance if it is
already instantiated.
Raaj
On Mon, 26 Mar 2007 08:47:53 -0700, Raaj <ra***********@ yahoo.comwrote:
A probable work around if you intend to avoid mutex, Give your main
form a unique name that has *good* chances of being unique and then
use the FindWindow API to retrieve its window handle.
You can check for the existence of the instance in the entry point of
your application and prevent from creating an instance if it is
already instantiated.
One problem with this method is that there is no way to guarantee one
instance of the application will have already created its window when the
next instance goes to check for it and vice a versa.
With the mutex, exactly one of the instances will actually create the
mutex, and the operating system guarantees exclusive access to the mutex.
There's no similar conflict resolution when checking for the application
window. The application can detect the case where the race condition
results in more than one instance running anyway, but then it still needs
to deal with deciding which instance "wins" and which instances have to
exit.
Basically, the mutex method is simple and provides guarantees that other
methods don't.
Pete
"Mattias Sjögren" <ma************ ********@mvps.o rgwrote in message
news:OT******** ********@TK2MSF TNGP05.phx.gbl. ..
Willy,
>>new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"). ToString()
Now there's an interesting way of generating a Guid string. :-)
Mattias,
LOL.
But seriously, at least it forces people to think about what it's meant for and what they
should do with it :-).
Willy. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Martin Smith |
last post by:
Hi,
Does anyone know a good (c++)example of the implementation of a
"robust" list iterator (ie an iterator whereby insert/delete
operations does not have any effect on the list)?
I am looking for an implementation that does not make copies of the list.
thanks in advance,
|
by: tkpmep |
last post by:
I use Python to generate a huge amount of data in a .csv file which I
then process using Excel. In particular, I use Excel's solver to solve
a number of non-linear equation, and then regress the results of
hundreds of calls to Solver against a set of known values, enabling me
to calibrate my model. This is a pain: i'd much rather perform all...
|
by: erebus- |
last post by:
When learning the C programing languages, i have had and still am
having the problem of not being able to find answers to many
questions. Is their an overall guide/reference that someone knows?
|
by: hoopsho |
last post by:
Hi Everyone,
I am trying to write a program that does a few things very fast
and with efficient use of memory...
a) I need to parse a space-delimited file that is really large,
upwards fo a million lines.
b) I need to store the contents into a unique hash.
c) I need to then sort the data on a specific field.
d) I need to pull out...
|
by: Juuso Hukkanen |
last post by:
I am looking for a wish list of things which should be removed from
the C (C99) - due to feature's bad security track record <OT>or
Multithreading unsafety. I need this list for a project intending to
build another (easiest & most powerful) programming language, which
has a two page definition document stating: "... includes C
programming...
| |
by: Benjamin |
last post by:
I am attempting to create multiple itterators for a custom class that I have created. Basically I have a class that I am populating using XML de-serialization. I want to be able to loop through the class using a foreach loop. I realize that in order to do this I need to create my own GetEnumerator that implements the movenext and current methods. ...
|
by: Matt Kruse |
last post by:
I'm seeking the most robust and backwards-compatible (ie, no instanceof)
isArray function.
Here's what I have:
function defined(o) {
return typeof(o)!="undefined";
}
function isArray(o) {
// If these conditions aren't met, it certainly isn't an Array
|
by: Bjarne |
last post by:
Dear all,
although being a user of PHP and other scripting-languages for years, I
have not taken part in any large projects based on PHP. Thus, I don't
really know how real PHP-applications are deployed out there. This
posting is a request for input from professional PHP-users and
architects with experience from designing PHP applications.
...
|
by: UG |
last post by:
I just wanted to know whether any timer facility exists in C, as it is
not mentioned in K&R 2, or in the ISO Draft. By timer function i mean
that when we use standard input function like scanf() or getch() or
any other function, the interface stops to take input from user but
what if user doesn't give input for hours, the program will still be...
|
by: py_genetic |
last post by:
Hello,
I'm importing large text files of data using csv. I would like to add
some more auto sensing abilities. I'm considing sampling the data
file and doing some fuzzy logic scoring on the attributes (colls in a
data base/ csv file, eg. height weight income etc.) to determine the
most efficient 'type' to convert the attribute coll into...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...
| |