Toon posts:

[Algemeen] Slechts eenmaal programma opstarten*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bestaat er in windows een manier om te verhinderen dat een user een programma tweemaal opstart door tweemaal op een desktop-icoontje te klikken?
Er mag dus telkens maar 1 sessie van het prog open zijn.

Alvast bedankt voor jullie reacties.

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Weet ik niet, maar als je 't met een batchjobje doet:
code:
1
2
3
4
5
6
if exist c:\temp\blaat.bla goto gaan
exit
:gaan
copy c:\bla\blaat.bla c:\temp\
call MijnProgramma.bat
del c:\temp\blaat.bla

Dus: als je het prog start zet je een filetje neer. Zolang die file bestaat kan je het prog niet starten. Als je het prog sluit, wordt het filetje verwijderd.

[ Voor 39% gewijzigd door CmdrKeen op 07-07-2003 16:13 ]

Bloed, zweet & koffie


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Iets mooier is misschien een scriptje mee laten draaien die elke dubbele instantie meteen killed:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set WshShell = WScript.CreateObject ( "WScript.Shell" )
programma = "notepad.exe"
maxAantalKeer = 1
Do until c = -1
n = 0
    for each Process in GetObject _ 
("winmgmts:{impersonationLevel=impersonate}").ExecQuery _ 
("select * from Win32_Process")
        c=instr(programma,process.name)
        if c <> 0 then
              if n > 0 then
                Process.terminate(0)
            else 
                n = 1
            end if
        end if
    Next
WScript.Sleep 2000
Loop


Zolang deze draait kan er maar 1 kladblok open zijn. Op deze manier is het trouwens nogal resource vretend; je zou er een pauze in kunnen lassen, zodat elke x seconden wordt gekeken & afgesloten. Ik ben te goede voor deze wereld: nu wordt elke twee seconden gekeken :P De met _ afgesloten zinnen horen achter elkaar geplakt.

[ Voor 24% gewijzigd door F_J_K op 07-07-2003 16:38 . Reden: layout ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

Vind je dat mooier? Ik weet niet, maar voorkomen dat een prog nog eens wordt opgestart lijkt me beter dan wachten tot 't gestart is en het dan killen..

't Is niet mijn kop thee verder, maar ik dacht zo: voorkomen is beter dan killen. Of niet?

Bloed, zweet & koffie


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Vilenin schreef op 07 juli 2003 @ 16:37:
Vind je dat mooier? Ik weet niet, maar voorkomen dat een prog nog eens wordt opgestart lijkt me beter dan wachten tot 't gestart is en het dan killen..

't Is niet mijn kop thee verder, maar ik dacht zo: voorkomen is beter dan killen. Of niet?
Klopt helemaal. Maar een keer een crash en je kunt het nooit meer starten aangezien de batch niet meer werkt (op te lossen door een logonscript die het weer verwijderd zodat een reboot genoeg is), ook staat er een 'lelijk' zwart scherm in beeld en is het te beveiligen prog nog te starten door met de hand de executable aan te roepen.

Maar inderdaad, dat werkt ook goed en dat is ook (ongeveer) de methode die ik zelf gebruik voor een bepaald programma. En het vreet veel minder resources :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

* Vilenin agrees.

Bloed, zweet & koffie


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

The Best of Both Worlds:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
Set WshShell = WScript.CreateObject ( "WScript.Shell" )
programma = "notepad.exe"
maxAantalKeer = 1

n = 0
for each Process in _
GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_Process")
  c=instr(programma,process.name)
  if c <> 0 then n = n + 1
Next

if n < maxAantalKeer then WshShell.Run programma

Zo hoeft er geen tijdelijk bestand of zwart scherm te komen. Wel geld natuurlijk nog dat in dit geval notepad gewoon is op te starten via de verkenner. Bovenstaande kan je trouwens ook wel bouwen met commandline tools (bijv sysinternals pstools) zonder VBScript.

offtopic:
Er zit een stomme fout in m'n eerste script zie ik nu, ik gebruik maxAantalKeer helemaal niet :X

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1