﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » .NET Forums » General .NET Discussion  » Single Instance Application...</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Mon, 27 Apr 2026 09:11:33 GMT</lastBuildDate><ttl>20</ttl><item><title>Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12923.aspx</link><description>When using Strataframe the required Startup Object is AppMain to that the database connections for the Business Objects can be established, and with that, you can't use the Visual Studio Option of Single Instance Application in the Application Properties.&amp;nbsp; So I was wondering what was the best way of handling this manually.&lt;/P&gt;&lt;P&gt;I spent a few minutes reading through some ways people have done this online, but it seems to boil down to searching through the processes and finding one that matches your form's Title or something such.&amp;nbsp; I ended writing a quick method that searches on the type of the form in the AppMain's InitApplication method.&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;Is this the best way to handle this ?&amp;nbsp; Also this doesn't currently allow the same application to be run by multiple users on the same system, ie users over Terminal Services etc.&amp;nbsp; I guess I would have to add another quick check for if the Owner of that Process is the current Application's process owner or some such.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;I was just wanting to get some input from anyone who may have had to do this as well.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;Thanks&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;Robin Giltner&lt;/P&gt;&lt;/FONT&gt;</description><pubDate>Sat, 26 Nov 2011 09:31:46 GMT</pubDate><dc:creator>Robin J Giltner</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost30664.aspx</link><description>Yep, that is it. &lt;br/&gt;&lt;br/&gt;I go a bit further on my applications since I have a Licensing control based on licenses per machine. So I create the Mutex under a Global state, this way I can count the number of instances running even on various Terminal Service sessions.</description><pubDate>Sat, 26 Nov 2011 09:31:46 GMT</pubDate><dc:creator>Ivan George Borges</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost30663.aspx</link><description>Hi Ivan...&lt;br/&gt;&lt;br/&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;        &lt;font color="#aaaaaa"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br/&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#aaaaaa"&gt;&amp;nbsp; ///&lt;/font&gt; &lt;font color="#008800"&gt;The main entry point for the application.&lt;/font&gt;&lt;br/&gt;&lt;font color="#aaaaaa"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br/&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;&lt;font color="#000000"&gt;[&lt;/font&gt;STAThread&lt;/font&gt;&lt;font color="#000000"&gt;]&lt;br/&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;static void&lt;/font&gt; Main()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008800"&gt;//-- Evita mais de uma instância&lt;br/&gt;&lt;/font&gt;&lt;strong&gt;&lt;font style="background-color: rgb(170, 221, 238);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;bool&lt;/font&gt; ok;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;Mutex&lt;/font&gt; loMutex = &lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#008888"&gt;Mutex&lt;/font&gt;(&lt;font color="#0000ff"&gt;true&lt;/font&gt;, &lt;font color="#008888"&gt;Application&lt;/font&gt;.ProductName + &lt;font color="#008888"&gt;Application&lt;/font&gt;.ProductVersion, &lt;font color="#0000ff"&gt;out&lt;/font&gt; ok);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt; if&lt;/font&gt; (!ok)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;MessageBox&lt;/font&gt;.Show(&lt;font color="#aa2222"&gt;"Aplicativo já está em execução"&lt;/font&gt;);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;Application&lt;/font&gt;.Exit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;nbsp; return&lt;/font&gt;;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;p&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008800"&gt;//-- Enable visual styles on the application&lt;/font&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;Application&lt;/font&gt;.EnableVisualStyles();&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008800"&gt;//-- Run the application&lt;/font&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;StrataFrameApplication&lt;/font&gt;.RunApplication();&lt;/font&gt;&lt;p&gt;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008800"&gt;//-- Stop the session monitoring before the application exits to remove the low-level event handlers&lt;/font&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008888"&gt;SessionLock&lt;/font&gt;.StopSessionMonitoring();&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;font color="#000000"&gt;&lt;font style="background-color: rgb(170, 221, 238);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;font color="#008888"&gt;GC&lt;/font&gt;.KeepAlive(loMutex);&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;font color="#000000"&gt;&lt;font style="background-color: rgb(170, 221, 238);"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br/&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;/font&gt;</description><pubDate>Sat, 26 Nov 2011 07:54:07 GMT</pubDate><dc:creator>Rogerio Mauri</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost30658.aspx</link><description>Hi Rogerio.&lt;br/&gt;&lt;br/&gt;GetProcessByName is a lot simpler, but has some disavantages:&lt;ul&gt;&lt;li&gt;it will allow 2 instances to run if you change the .EXE name&lt;/li&gt;&lt;li&gt;if you have 2 separate applications with the same name, it won't allow them to run at the same time&lt;/li&gt;&lt;li&gt;Mutex can work with a Global escope, so it will make sure the application run only once in the entire system, even on Terminal Services&lt;/li&gt;&lt;li&gt;apparently, GetProcessByName may not access minimized windows properly&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Fri, 25 Nov 2011 09:06:25 GMT</pubDate><dc:creator>Ivan George Borges</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost30656.aspx</link><description>Code...&lt;br/&gt;&lt;br/&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// The main entry point for the application.&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [STAThread]&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&lt;strong&gt;&lt;font color="#000088"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //-- Evita mais de uma instância&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length &amp;gt; 1)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("Aplicativo já está em execução");&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.Exit();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/font&gt;&lt;/strong&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //-- Enable visual styles on the application&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.EnableVisualStyles();&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //-- Add event handlers for the application events&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StrataFrameApplication.ShowGateway +=&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new StrataFrameApplication.ShowGatewayEventHandler(&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowGateway);&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;</description><pubDate>Fri, 25 Nov 2011 08:38:49 GMT</pubDate><dc:creator>Rogerio Mauri</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost25134.aspx</link><description>Hi Larry,&lt;br&gt;
&lt;br&gt;
Thanks for the information.  I google this issue and found some different approaches, I combined two of them and was able to put together a solution that will will do just what is expected from the user: if the application is minimized, it will just bring it to the from.&lt;br&gt;
&lt;br&gt;
Of course this solution is not as simple as using the Mutex and may have other issues since it uses the System.Diagnostics.Process to get to the application.&lt;br&gt;
&lt;br&gt;
Ok here is the code.. Copy these 2 classes to a new class file in the main project I called mine "SingleInstance.vb"  or if you have a based class in the main .exe project you could use that as well.&lt;br&gt;
[codesnippet]&lt;br&gt;
#Region " Code to handle a single instance of the application "&lt;br&gt;
&lt;br&gt;
    'Windows API&lt;br&gt;
    Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long&lt;br&gt;
    Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long&lt;br&gt;
&lt;br&gt;
    ''' &lt;summary&gt;&lt;br&gt;
    ''' Function to check and see if an instance of the application is already open&lt;br&gt;
    ''' &lt;/summary&gt;&lt;br&gt;
    ''' &lt;param name="sApp"&gt;Name of the application&lt;/param&gt;&lt;br&gt;
    ''' &lt;returns&gt;True/False&lt;/returns&gt;&lt;br&gt;
    ''' &lt;remarks&gt;&lt;/remarks&gt;&lt;br&gt;
    Public Shared Function IsAlreadyOpen(ByVal sApp As String) As Boolean&lt;br&gt;
        'Check running processes to see if application is already running&lt;br&gt;
        Dim pProcess As Process() = System.Diagnostics.Process.GetProcessesByName(sApp)&lt;br&gt;
        If pProcess.Length &gt; 1 Then  'If &gt; 1 then its already running&lt;br&gt;
            Return True&lt;br&gt;
        Else  'Not running&lt;br&gt;
            Return False&lt;br&gt;
        End If&lt;br&gt;
    End Function&lt;br&gt;
&lt;br&gt;
    Public Shared Sub ActivatePrevInstance(ByVal argStrAppToFind As String)&lt;br&gt;
        Dim PrevHndl As Long&lt;br&gt;
        Dim result As Long&lt;br&gt;
&lt;br&gt;
        Dim objProcess As New Process 'Variable to hold individual Process&lt;br&gt;
        Dim objProcesses() As Process 'Collection of all the Processes running on local machine&lt;br&gt;
        objProcesses = Process.GetProcesses() ''Get all processes into the collection&lt;br&gt;
&lt;br&gt;
        For Each objProcess In objProcesses&lt;br&gt;
&lt;br&gt;
            If UCase(objProcess.ProcessName) = UCase(argStrAppToFind) Then&lt;br&gt;
                If Not String.IsNullOrEmpty(objProcess.MainWindowTitle) Then&lt;br&gt;
                    'MessageBox.Show(objProcess.MainWindowTitle)&lt;br&gt;
                    PrevHndl = objProcess.MainWindowHandle.ToInt32()&lt;br&gt;
                    Exit For&lt;br&gt;
                End If&lt;br&gt;
            End If&lt;br&gt;
        Next&lt;br&gt;
        If PrevHndl = 0 Then Exit Sub 'if No previous instance found exit the application.&lt;br&gt;
        ''If found&lt;br&gt;
        result = OpenIcon(PrevHndl) 'Restore the program.&lt;br&gt;
        result = SetForegroundWindow(PrevHndl) 'Activate the application.&lt;br&gt;
&lt;br&gt;
        End 'End the current instance of the application.&lt;br&gt;
    End Sub&lt;br&gt;
#End Region&lt;br&gt;
[/codesnippet]&lt;br&gt;
&lt;br&gt;
Now like in your case, to execute it in the AppMain.vb after the "Public Shared Sub Main()" add this code:&lt;br&gt;
[codesnippet]&lt;br&gt;
If SingleInstance.IsAlreadyOpen(My.Application.Info.ProductName) Then&lt;br&gt;
            SingleInstance.ActivatePrevInstance(My.Application.Info.ProductName)&lt;br&gt;
            Exit Sub&lt;br&gt;
 End If&lt;br&gt;
[/codesnippet]</description><pubDate>Fri, 06 Nov 2009 11:49:27 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost25131.aspx</link><description>What I actually ended up doing in my applications&amp;nbsp;is to display a SF message telling the user that an instance was already running. I imagine there is probably some way to display the original instance but our users are fine with the message so that's where I left it.&lt;/P&gt;&lt;P&gt;-Larry</description><pubDate>Fri, 06 Nov 2009 10:40:44 GMT</pubDate><dc:creator>Larry Caylor</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost25127.aspx</link><description>Hi Larry,&lt;br&gt;
&lt;br&gt;
I also implemented your code and it does works well.&lt;br&gt;
&lt;br&gt;
Instead of just exiting without letting the user know what may be happening, is there a way to simply show up the instance that is currently open?</description><pubDate>Thu, 05 Nov 2009 15:19:18 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12960.aspx</link><description>Hi Larry.&lt;/P&gt;&lt;P&gt;Thanks for the code snippet. I was just trying to accomplish this, and it worked really fine.&lt;/P&gt;&lt;P&gt;:smooooth:</description><pubDate>Mon, 10 Dec 2007 12:24:30 GMT</pubDate><dc:creator>Ivan George Borges</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12949.aspx</link><description>Haha, yep, Larry, much simpler.&amp;nbsp; Good idea.</description><pubDate>Mon, 10 Dec 2007 08:40:56 GMT</pubDate><dc:creator>StrataFrame Team</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12937.aspx</link><description>Robin,&lt;/P&gt;&lt;P&gt;I've been using the mutex method for restricting an application to a single instance. It's easy to implement and so far it's worked well for me. By varying the safeName you should be able to over come the problem in Terminal Services.&lt;/P&gt;&lt;P&gt;&amp;nbsp;I include the following code at the top of Public Shared Sub Main in AppMain.&lt;/P&gt;&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; firstInstance &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Boolean&lt;/FONT&gt;&lt;FONT size=2&gt; = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;False&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;'-- Create a name based on the user application path. &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; safeName &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;String&lt;/FONT&gt;&lt;FONT size=2&gt; = Application.UserAppDataPath.Replace(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"\"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"_"&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Dim&lt;/FONT&gt;&lt;FONT size=2&gt; myMutex &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;As&lt;/FONT&gt;&lt;FONT size=2&gt; Mutex = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;New&lt;/FONT&gt;&lt;FONT size=2&gt; Mutex(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;True&lt;/FONT&gt;&lt;FONT size=2&gt;, safeName, firstInstance)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;'-- Bail if not first instance.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;If&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Not&lt;/FONT&gt;&lt;FONT size=2&gt; (firstInstance) &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Then&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Exit&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Sub&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;'-- Make sure the program holds the mutex as long as it is running.&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;GC.KeepAlive(myMutex)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;See &lt;A href="http://www.ai.uga.edu/mc/SingleInstance.html"&gt;http://www.ai.uga.edu/mc/SingleInstance.html&lt;/A&gt;&amp;nbsp;for more info. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size=2&gt;-Larry&lt;/P&gt;&lt;/FONT&gt;</description><pubDate>Fri, 07 Dec 2007 10:33:07 GMT</pubDate><dc:creator>Larry Caylor</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12936.aspx</link><description>Thanks Ben. I'll start looking through that for a good starting point at least.&lt;/P&gt;&lt;P&gt;Robin Giltner</description><pubDate>Fri, 07 Dec 2007 10:30:44 GMT</pubDate><dc:creator>Robin J Giltner</dc:creator></item><item><title>RE: Single Instance Application...</title><link>http://forum.strataframe.net/FindPost12931.aspx</link><description>It's complicated, but not impossible.&amp;nbsp; You might want to duplicate what .NET does with the IsSingleInstance property of the Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase class.&amp;nbsp; I opened the Microsoft.VisualBasic.dll with Reflector and looked at the Run() method.&amp;nbsp; The first thing it checks on is the IsSingleInstance property.&amp;nbsp; If it's a single instance, then it checks the application instance ID through some stuff and makes sure there's not already one running in memory.&amp;nbsp; So, it would be pretty simple to just copy the code out of Reflector and add it to your application.</description><pubDate>Fri, 07 Dec 2007 09:01:17 GMT</pubDate><dc:creator>StrataFrame Team</dc:creator></item></channel></rss>