PDA

View Full Version : [Batch] Impedire istanze multiple - curiosità


23Andrea
12-09-2015, 10:42
Ciao.
Ho scritto queste poche righe da aggiungere all'inizio di uno script, per impedire l'esecuzione contemporanea di più istanze:
TASKLIST /FI "WINDOWTITLE eq Una_sola_istanza.bat" |(
FINDSTR cmd.exe
)
IF %errorlevel% EQU 0 (
EXIT
)
TITLE Una_sola_istanza.bat
PAUSE
Il comando PAUSE è ovviamente a solo scopo di test, e deve essere sostituito con il codice da eseguire.
Il codice funziona correttamente se si fa ripetutamente doppio click sull'icona del file bat: solo la prima istanza viene eseguita, mentre le seguenti vengono terminate immediatamente.
Ma se, dopo l'apertura della prima finestra si clicca sul prompt, è possibile aprire una seconda istanza. Cliccando sul secondo prompt è possibile aprirne una terza... e così via.
Qualcuno più esperto di me conosce la ragione di questo comportamento?
Grazie,

tomminno
14-09-2015, 07:55
Nel tuo script stai cercando una finestra che ha come titolo "Una_sola_istanza.bat", ma se apri il prompt la finestra non ha il nome dello script quindi il controllo viene superato.
Per fare quello che chiedi, dovresti utilizzare un file di guardia, se c'è vuol dire che un'altra istanza è in esecuzione, altrimenti lo crei, esegui il tuo codice e alla fine cancelli il file.

23Andrea
14-09-2015, 13:10
.. se apri il prompt la finestra non ha il nome dello script ...
Io non parlo di un prompt generico, aperto "ex novo", ma del prompt (finestra) dello stesso script che contiene il codice che ho postato.
Però mi hai messo sulla strada giusta: quando si clicca sulla finestra (non lo avevo notato :fagiano: ) il titolo viene automaticamente modificato da "Una_sola_istanza.bat" a "Seleziona Una_sola_istanza.bat", e quindi, ovviamente, il controllo non funziona più.
Buona idea quella del "file di guardia": non ci avevo pensato :doh: .
Grazie.