Warten auf das Ende

  • Hallo Forum !


    Habe folgendes , eher allgemeingültiges, Problem:


    Schreibe zur Zeit eine kleine HelpDesk-Anwendung. So nach dem Thema : Nutzer macht ein Ticket auf, Bearbeiter sehen neues Ticket , nehmen in Bearbeitung etc. Die DB liegt auf nem Server.
    Als Hilfe für den Bearbeiter soll bei jedem Ticket eine Konfigurationsreport des Nutzer-PC erfolgen. Der Report wird per Shellaufruf von msinfo32 im Querysave-Event der Ticketmaske erstellt. Problem dabei: Das Programm läuft natürlich eine Weile (bis zu einer Minute) . Folge ist, dass ich irgendwie per LS abfragen muss ob die Reportdatei schon existiert und fertig geschrieben ist. Im Moment sieht das bei mir so aus:


    Do While isfile(fname) = False
    If isFile(fname) Then
    id=fname
    End If
    Loop
    sleep 5


    Function isFile(Byval sFileName As String) As Integer
    On Error Resume Next
    Dim lFileLength As Long
    Const ATTR_NORMAL = 0

    isFile = False
    If Dir$(sFileName, ATTR_NORMAL) <> "" Then
    lFileLength = Filelen(sFileName)
    If (lFileLength > 0) Then isFile = True
    End If
    End Function


    Das Do while macht den LoNo-Client für den Anwender erstmal dicht , das Dokument wird erst nach Erstellung der Datei gespeichert. Wie man sieht basiert das alles auch nicht wirklich auf sauber zu deklarierenden Eigenschaften der Datei , da nur geprüft wird ob die sie existiert und die Dateilänge > 0 ist. Dann wird noch 5 Sekunden gewartet.


    Meine Fragen dazu:


    Wie sieht ein sinnvoll(erer) Ansatz aus um den Shellaufruf (also die Erstellung der Datei bzw. das Warten auf die fertige Datei) in den "Hintergrund" zu bringen, so dass der Client nicht blockiert wird? Gibt es eine sinnvollere Methode festzustellen, ob die Datei wirklich komplett geschrieben ist ? Evtl. Abfrage ob im Windows die msinfo32-Task noch läuft ?


    Jeder Hinweis, Anregung, Mecker sind willkommen.


    Danke !


    Gruß RKuehle

    • Offizieller Beitrag

    benenne in dem Shell-Aufruf doch als letztes die Datei um, dann kannst Du sicher sein, das die Datei schon fertig geschrieben ist.


    Client nicht blockieren wird nicht so einfach gehen. Nur mal als Idee - schreibe die Datei am Ende auf ein Netzlaufwerk und der Server schaut periodisch nach den Dateien und importiert diese.


    Eine andere Variante wäre es den Shell-Aufruf über die WIN-APi zu machen, dort gibt es die Möglichkeit das Script warten zu lassen, bis der Shell-Aufruf beendet ist. Nachteil bei einem Mac- oder später einem Linux-Client funktionieren Win-Api und Win-Shell nicht mehr und der Client ist blockiert.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein