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 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 dicht . Das akt. 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 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