Wann ist Prozess beendet

  • #1
V

VoiD

Bekanntes Mitglied
Themenersteller
Dabei seit
05.06.2002
Beiträge
155
Reaktionspunkte
0
Hi,

ein Kollege hat in VBA eine DOS Console, die eine SQL Anweisung ausführt mit folgendem Befehl erzeugt:

Task = Shell(....)

Wie kann er jetzt überprüfen, ob der entsprechende Prozess beendet ist (die DOS Console schliesst sich nach Ausführung des SQL Statements).

Sorry dass ich es nicht genauer schreiben kann, aber ich habe von VBA überhaupt keine Ahnung.

Hoffe es kann mir trotzdem jemand helfen.

Gruß
VoiDy
 
  • #2
Hallo Void,

die Dos-shell kannst du folgendermassen überwachen:
Code:
Sub ShellAufrufMitUeberwachung()

  If Shell_AufEndeUeberwachen = False Then
    MsgBox (Die DOS-Shell ist nach der maximalen Wartezeit & _
            immer noch nicht fertig :-()
  Else
    MsgBox (Die DOS-Shell wurde ordnungsgemaess beendet)
  End If

End Sub

Function Shell_AufEndeUeberwachen() As Boolean
  
  Const Wartezeit As Integer = 2->Sekunden
  
 ->max Wartezeit der Schleife
  Const schleife_max As Integer = (2 * 60) / Wartezeit
  
  Dim d_ID As Double->ID der shell
  Dim x As Long
  
  d_ID = Shell(C:\WINDOWS\COMMAND.COM, 1)
  
  Shell_AufEndeUeberwachen = False
  For x = 1 To schleife_max
    On Error GoTo d_ID_ist_fertig
   ->DOS-Fenster aktivieren, bringt Fehler
    AppActivate d_ID
    On Error GoTo 0
   ->Wartezeit bis zum nächsten Aufruf
    Application.Wait TimeSerial(Hour(Now()), _
                                Minute(Now()), _
                                Second(Now()) + Wartezeit)
  Next
  GoTo EndeBearbeitung:
  
d_ID_ist_fertig:
  Err.Clear
  Shell_AufEndeUeberwachen = True
  
EndeBearbeitung:
End Function

Gruß Matjes :)
 
  • #3
Danke erstmal :)

Der Kollege wird es demnächst ausprobieren. Bin mal gespannt ob es klappt.
 
  • #4
@Matjes

Tut mir leid, aber deine Lösung hat leider nicht funktioniert. Wenn man deine Lösung - so wie sie ist - laufen lässt, kommt sofort die Message Box, dass die DOS-Shell ordnungsgemäß beendet ist, obwohl sie noch vorhanden ist. Ich kann deine Lösung nicht 100%-tig nachvollziehen, aber es sieht mir so aus, als ob nur geprüft wird, ob die Ausführung des Öffnens der Shell überwacht wird.

Vielleicht sollte ich nochmals schildern, was ich erreichen möchte:

ich gebe in einem VBA Eingabefenster mehrere Parameter ein. Anschliessend starte ich ein Batch File (Oracle SQL Abfrage mit einer Laufzeit bis zu 2 Minuten) und übergebe diese Parameter an das File:
Code:
ProzessID = Shell(xxx.bat & space(1) & fa & space(1) & zeitraum ,1)

Damit das Batch ausgeführt wird, öffnet das Betriebssystem (Win2000) eine Command-Shell. In dieser wird das Batch abgearbeitet. Nach der Abarbeitung wird die Shell automatisch geschlossen.
Nach meinem Verständnis (und der Beobachtung im Taskmanager) gibt es die ProzessID dann nicht mehr.

Meine Hoffnung war nun, dass ich mit VBA-Mitteln abfragen kann, ob die ProzessID im Betriebssystem noch vorhanden ist (=Prozess wird noch ausgeführt) oder die ProzessID nicht mehr vorhanden ist, was ein Zeichen für die Beendigung der Abfrage wäre.

Hat jemand eine Idee, ob eine solche Überprüfung mit VBA Mitteln möglich ist?
 
  • #5
Hallo VoiD,

hab es leider nur mit einer Cmd.exe probiert - war nicht so toll :'(

Ein zweiter Anlauf:

Unter gibt es->API: Shell and Wait'.

Hab mir einen kleine .bat geschrieben, die auf Eingabe wartet und sich nach der Eingabe beendet.
Mit folgendem Aufruf
Code:
Sub testxxx()
  Call ShellWait(c:\download\xxx.bat, 1)
  MsgBox (Ich bin fertig )
End Sub
hat die Shell brav auf Eingabe gewartet. Nach der Eingabe schloss sich die Shell und es erfolgte die Fertig-Meldung - also sollte es so klappen.

Gruß Matjes :)
 
  • #6
@Matjes

So, der Kollege hat es jetzt ausprobiert, und es funktioniert wunderbar. Vielen, vielen Dank, auch vom Kollegen :).
 
Thema:

Wann ist Prozess beendet

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben