Jump to content

Multiple instance with limit

Recommended Posts


Hello. I need to allow multiple instance of the same script, now are disabled, but with some limitation

1) Not from the same dir. Example if i launch C:\Test.exe you can't run again C:\Test.exe but a copy of that in another folder like C:\Folder\Test.exe. The reason is the .dat i use for configuration, i don't what to share the same file with multiple instance. Every instance need to use a separate .dat but with the same name.

2) I need to know the number of the instance. Example a MsgBox from the C:\Test.exe return "Hello i'm number 1" the other one return "Hello i'm number 2" and so on

Some advice-script-direction? Thanks

Edited by Terenz

Nothing is so strong as gentleness. Nothing is so gentle as real strength


Share this post

Link to post
Share on other sites

What about this

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <array.au3>
#include <WinAPIProc.au3>


While 1

Func _CheckForRunning()
    Local $av_Process = ProcessList('SciTE.exe')
    Local $i_TotalOccurence = $av_Process[0][0]
    Local $i_Limit = 3

    If $i_TotalOccurence > $i_limit Then ; check for max instances
        MsgBox(0, $i_TotalOccurence, 'limit reached')

;~ _ArrayDisplay($av_Process)

    Local $s_ProcessFilePath = '' ; path of the running instance
    Local $s_StartingFilePath = @ScriptFullPath ; path of the new instance
    Local $i_RunProgram = 0 ; determine whether to run new instance (No)

    For $i = 1 To $i_TotalOccurence
        If $av_Process[$i][1] <> @AutoItPID Then ; skip self checking
            $s_ProcessFilePath = _WinAPI_GetProcessFileName($av_Process[$i][1])
            MsgBox(0, $av_Process[$i][0], 'I am instance ' & $i & @CRLF & 'Me        : ' & $s_StartingFilePath & @CRLF & 'Running: ' & $s_ProcessFilePath)

            If $s_StartingFilePath = $s_ProcessFilePath Then
                MsgBox(0, 'Shall I Run?', 'No')
                ExitLoop ; skip if path matches one already running

        If $i = $i_TotalOccurence Then $i_RunProgram = 1 ; all paths checked and no dupes running, allow new instance

    If Not $i_RunProgram Then Exit

    MsgBox(0, 'Shall I Run?', 'Yes')
EndFunc   ;==>_CheckForRunning


Edited by benners

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.