Countdown während der Laufzeit wieder auf Anfang stellen und erst wenn t0 erreicht, dann ein bestimmtes Programm starten. Lösung als vbscript wäre schön
Hallo Leute,
bestimmte Nutzer erzeugen zeitweise über eine Software mehrere Transaktionen in einer DB und nach
jeder einzelnen Transaktion wird automatisch ein bestimmtes Programm (A) gestartet.
Das hat zur Folge, dass das Programm möglicherweise mehrmals hintereinander gestartet wird.
Abhilfe soll ein Countdown schaffen.
Das Programm (A) soll nicht mehr direkt gestartet werden, sondern erst nach einem zuvor bei z.B. (t=30s) gestarteten Countdown,
welcher bei (t=0s) dann tätig wird. Wird jedoch während der Laufzeit des Countdown eine weitere Transaktion getätigt,
so soll der Countdown wieder von vorne bei (t=30s) beginnen.
Erst wenn keine Transaktionen mehr innerhalb der Laufzeit des Countdown getätigt werden, soll das Programm (A) gestartet werden.
Ideal wäre es, wenn das Ganze mit vbscript lösbar wäre.
Danke vorab für eure Lösungen
Gruß
Roland
bestimmte Nutzer erzeugen zeitweise über eine Software mehrere Transaktionen in einer DB und nach
jeder einzelnen Transaktion wird automatisch ein bestimmtes Programm (A) gestartet.
Das hat zur Folge, dass das Programm möglicherweise mehrmals hintereinander gestartet wird.
Abhilfe soll ein Countdown schaffen.
Das Programm (A) soll nicht mehr direkt gestartet werden, sondern erst nach einem zuvor bei z.B. (t=30s) gestarteten Countdown,
welcher bei (t=0s) dann tätig wird. Wird jedoch während der Laufzeit des Countdown eine weitere Transaktion getätigt,
so soll der Countdown wieder von vorne bei (t=30s) beginnen.
Erst wenn keine Transaktionen mehr innerhalb der Laufzeit des Countdown getätigt werden, soll das Programm (A) gestartet werden.
Ideal wäre es, wenn das Ganze mit vbscript lösbar wäre.
Danke vorab für eure Lösungen
Gruß
Roland
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364494
Url: https://administrator.de/forum/countdown-waehrend-der-laufzeit-wieder-auf-anfang-stellen-und-erst-wenn-t0-erreicht-dann-ein-bestimmtes-364494.html
Ausgedruckt am: 22.04.2025 um 17:04 Uhr
9 Kommentare
Neuester Kommentar
bestimmte Nutzer erzeugen zeitweise über eine Software mehrere Transaktionen in einer DB und nach jeder einzelnen Transaktion wird automatisch ein bestimmtes Programm (A) gestartet.
Da musst du mal etwas konkreter werden. Denn entweder musst du genau an diesem Punkt ansetzen und die transaktions-erzeugende Software muss prüfen ob Programm A bereits läuft oder du musst zumindest beschreiben woher ein Script wissen soll, ob/wann eine Transaktion gestartet wurde um prüfen zu können ob in diesem Fall Programm A bereits läuft. Wobei letzteres nicht hilft wenn Software 1 Programm A trotzdem mehrfach automatisch ausführt. Irgendwie wird das so noch überhaupt nicht rund.Steffen
Zitat von @reinhr:
Solange Transaktionen getätigt werden ...
Erst wenn keine Transaktionen mehr während der Laufzeit des Countdown anfallen ...
Solange Transaktionen getätigt werden ...
Erst wenn keine Transaktionen mehr während der Laufzeit des Countdown anfallen ...
Und da wären wir wieder bei meiner Frage:
woher ein Script wissen soll, ob/wann eine Transaktion gestartet wurde
Steffen
Das ganze ist schon ziemlich abstrakt für jemanden der nicht vor deinem Rechner sitzt.
Versuch:
Da du auf ein VBScript abgezielt hast, gehe ich davon aus dass du den Code verstehst und eventuelle Anpassungen oder Korrekturen selbst vornimmst.
Steffen
Versuch:
Option Explicit
Const wait = 30
Const progPath = "C:\Windows\notepad.exe"
Dim objFSO, objWSH, objWMI, colItems, objItem, ownPID
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSH = CreateObject("WScript.Shell")
Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
' Prozess ID des eigenen Scriptprozesses
ownPID = objWMI.Get("Win32_Process.Handle='" & objWSH.Exec("mshta.exe").ProcessID & "'").ParentProcessId
' Alle evtl. sonstigen Prozesse dieses Scripts beenden
Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name='wscript.exe' " & _
"AND CommandLine LIKE '%" & WScript.ScriptName & "%' " & _
"AND ProcessID <> " & ownPID)
For Each objItem In colItems
objItem.Terminate
Next
' Warten
WScript.Sleep wait * 1000
' Alle evtl. bereits laufendeden Instanzen des Programms beenden
Set colItems = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name='" & objFSO.GetFileName(progPath) & "'")
For Each objItem In colItems
objItem.Terminate
Next
' Programm starten
objWSH.Run """" & progPath & """"
Steffen
Da du explizit auf eine Timeout-Lösung hingearbeitet hast, bin ich davon ausgegangen, dass die offensichtlich einfachste Lösung nicht infrage kommt. Die wäre nämlich, dass das Script prüft ob schon eine Instanz des Programms läuft und nur dann eine neue Instanz des Programms startet, falls nicht. Aber wie gesagt, deine Erklärungen sind zu unspezifisch, als dass ich hätte entscheiden können ob das eine Option wäre.
Steffen
Steffen