Newsgroup: it.comp.os.win.windows10
Titolo: impedire l'esecuzione doppia di un programma

è possibile fare in modo che un programma non si avvii in una seconda-
terza-ventordicesima istanza quando è già aperto (e ridotto a icona)?
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Ammammata scrive:
|| è possibile fare in modo che un programma non si avvii in una
|| seconda- terza-ventordicesima istanza quando è già aperto (e ridotto
|| a icona)?
 
che programma sarebbe? Poche volte ho trovato doppioni in esecuzione 
senza un avvio voluto
 
 
 
 
 
 
 
 
 
 
 
 
 
-- 
Don Fizzy ® on MV 910R "Maverick"
"Non c'é trucco non v'é inganno"
       /)/)
      ( '.')
   o(_('')('')   That's all, folks!
Nessun bit è stato maltrattato
per spedire questo messaggio. 
 

 che programma sarebbe?
 
SAP Business One: è pensato appositamente per avere sessioni multiple, nei 
rari casi in cui serve, una volta all'anno, forse
 
ma per la totalità degli utenti standard, che lavorano su una sola azienda 
alla volta, non è una feature necessaria
 
invece spesso si "dimenticano" di averlo già aperto e ridotto a icona, e 
fanno partire nuove sessioni
 
poi si lamentano che il sistema è lento
 
un po' come quell'altro cliente che per leggere i messaggi di outlook li 
apriva in un nuova finestra, poi non la chiudeva: l'ultima volta ne aveva 
oltre 50 aperte: il fatto è che windows 10 le "cumula" in una sola icona 
per cui non si rendeva conto del numero enorme di roba che si stava 
portando inutilmente in giro


 multiple, nei rari casi in cui serve, una volta all'anno, forse
[...]
 
Se il programma "di suo" non lo prevede, l'unica è usare una "gabola"
(anche considerando il livello degli utenti :D), un esempio (questo
avvia "notepad")
 
 
'
' runapp.vbs avvio singola istanza
'
 
Option Explicit
 
' I/O su file
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
 
' oggetti globali
Dim oFS, oSH
 
' nome del file di lock
Const LOCK_FILE = "~tmplck.tmp"
 
' applicazione da avviare
Const APP_NAME = "C:\WINDOWS\system32\notepad.exe"
 
' inizializza ed avvia
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oSH = CreateObject("WScript.Shell")
WScript.Quit main()
 
' main
Function main()
  Dim sLockFile, rc
 
  On Error Resume Next
 
  ' tenta di creare il lock file
  sLockFile = TempFolder() & "\" & LOCK_FILE
  If MakeLock(sLockFile) = False Then
    ' lock file già esistente
    MsgBox "Applicazione già avviata", , "Avviso"
    main = 1
    Exit Function
  End If
 
  ' avvia l'applicazione
  rc = oSH.Run(APP_NAME, 1, true)
 
  ' elimina il lockfile ed esce
  KillLock sLockFile
  main = 0
End Function
 
' ottiene il percorso alla cartella temporanea
Function TempFolder()
  Dim sPath
 
  sPath = oSH.ExpandEnvironmentStrings("%TEMP%")
  TempFolder = sPath
End Function
 
' crea il lock se inesistente
Function MakeLock(sPathName)
  Dim fp
 
  On Error Resume Next
  MakeLock = False
  If oFS.FileExists(sPathName) Then
    Exit Function
  End If
  Set fp = oFS.OpenTextFile(spathname, ForWriting, True)
  fp.WriteLine Now()
  fp.Close
  MakeLock = True
End Function
 
' elimina il lock
Sub KillLock(sPathName)
  On Error Resume Next
  If Not oFS.FileExists(sPathName) Then
    Exit Sub
  End If
  oFS.DeleteFile sPathName, True
End Sub
 
 
 

 avvia "notepad")
 
Per chiarezza, salvi lo script come "runapp.vbs" nella cartella che
contiene l'applicativo e modifichi il contenuto di "APP_NAME" per
avviare il programma desiderato, a questo punto elimini il collegamento
all'applicativo dal desktop ed al suo posto metti un collegamento a
"runapp.vbs" impostando come icona del collegamento quella del tuo
applicativo... voilà :D
 

 
 
proveròllo, grazie
poi magari scopro che c'è l'opzione apposita nelle millemila configurabili


 configurabili
 
vedi tu, lo script funge per qualsiasi programma, infatti per provarlo
ho usato notepad, e quello di opzioni ne ha pochine :)
 
 

ObiWan scrive:

Interessante. Ottimo lavoro ObiWan, grazie
