Spesso si ha a che fare con istanze multiple dello stesso programma, anche se a volte si tratta di un uso scorretto ed involontario. Quando viene dato in uso un sistema o, in particolar modo, un’istanza di un programma che viene seguire su di una postazione dedicata, può capitare che qualche utente “distratto” possa non accorgersi che tale programma sia stato minimizzato nella systray e che quindi non trovandolo (forse neanche cercandolo) tenti di riaprire una nuova istanza dello stesso. Naturalmente questo può portare a conseguenze imprevedibili, le più delle quali hanno in comune un mal funzionamento del programma. Le strade sarebbero diverse, dal mandare una corrente elettrica all’utente poco attento, all’autodistruzione della postazione, o magari più semplicemente alla mancata esecuzione dell’applicazione con contorno messaggino di ammonimento.

Quest’ultima è (purtroppo) una delle scelte più razionali che possiamo prendere. Così cercando sulla rete ho trovato su  http://gallery.technet.microsoft.com/scriptcenter/b16df5e7-e03a-41f2-9991-b3f88ce49002 un VBScript che ho leggermente ritoccato che eviterà di mandare in esecuzione lo stesso eseguibile più volte ed inoltre ammonirà a vostro piacimento l’utente poco accorto.

[banner size=”468X60″ type=”text” align=”aligncenter”]

 

[cc language=vbs]

On Error Resume Next

strComputer = “.”
strProgramName = WScript.Arguments.Item(0)
strProgramPath = WScript.Arguments.Item(0)

Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)
Set objShell = CreateObject(“WScript.Shell”)
Set colProcessList = objWMIService.ExecQuery _
(“Select * from Win32_Process Where Name = ‘” & strProgramName & “‘”)

If colProcessList.Count > 0 Then
strMessage = “Il programma “+strProgramName+” è già in esecuzione!”
MsgBox strMessage
Else
objShell.Run strProgramPath
End If

[/cc]

Le variabili che probabilmente vorrete personalizzare sono solo 4:

  • strComputer: E’ il nome del computer dove il programma dovrebbe andare ad essere eseguito, tipicamente va bene lasciare invariato il valore
  • strProgramName: E’ il nome del programma comprensivo di estensione che volete tenere sotto controllo. Il valore passato alla variabile non è altro che il primo argomento passato allo script.
  • strProgramPath: E’ il nome del programma completo di percorso (path).
  • strMessage: E’ il messaggio che verrà mostrato se verrà trovata già in esecuzione almeno un’istanza del programma.
Nel mio caso ho scelto di usare lo stesso parametro per la variabile del nome e per quella del path, per il semplice fatto che lo script vbs è stato posizionato nella stessa directory del programma monitorato, mentre è stato poi creato il link al VBScript da un’altra parte specificando nella proprietà Destinazione il nome del programma.estensione (il famoso argomento passato allo script di cui abbiamo parlato in precedenza).

 

fonte: http://technet.microsoft.com/it-it/scriptcenter/