Einzelnen Beitrag anzeigen

Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

Systemfehler. Code 1400. Ungültiges Fensterhandle. Und nu?

  Alt 9. Mai 2005, 12:29
Salut

die o.g. Fehlermeldung der Klasse "EOSError"
Zitat:
Systemfehler. Code 1400. Ungültiges Fensterhandle. Und nu?
erhalte ich, wenn ich mein Programm schliesse.

Der Fehler tritt aber nur auf, wenn ich vorher im Programm folgendes "Feature" auslöse:
In einem Formular (MDIChild) wird folgende Proc aufgerufen:
Delphi-Quellcode:
procedure Tf_Vorgangsbuch.DOSUpdate1Click(Sender: TObject);
begin
{ Erstmal schauen, ob das Update ansich schon läuft (MySQL-Importer erstellt
die genannte Dummy-Datei, die nach Beendigung wieder entfernt wird - weiterhin
wird geprüft, ob nicht schon ein Update eines anderen Moduls läuft, und die TCPServer-Kompo
frei ist}

  if (NOT FileExists('y:\mysqlimporter\test\dummy_p_vorgangsbuch')) AND
     (NOT f_main.TcpServer.Active) then
  begin
    f_main.TcpServer.Active := True;

    ShellExecute(
      f_vorgangsbuch.handle,
      'open',
      PChar('psexec.exe'),
      PChar('\\testserver -i -w y:\mysqlimporter\test\ -d ' +
        ' y:\mysqlimporter\test\import.exe ' +
        ' J:\test\vorgbuch.dbf p_vorgangsbuch Ja ' +
        f_main.getIPs[0] ),
      PChar('y:\mysqlimporter\test\'),
      SW_SHOW);
  end else
    ShowMessage(' Update wird bereits ausgeführt! ');
end;
FYI: Auf dem Server existiert ein kleines Programm, welches DBF-Dateien ausliest und in eine MySQL-DB schreibt. Das Programm läuft einerseits per Taskmanager selbständig, um einige Datenbanken regelmäßig zu aktualisieren, anderersets, wenn es mit Parametern aufgerufen wird, kann es eine beliebige DBF-Datei auf meinen MySQL-Server schieben. Da das Programm aber auf den Clients sehr langsam läuft, wird es über PSEXEC "remote" auf dem Server ausgeführt.
Bisher ist das alles noch ganz einfach. Nun will man aber auch wissen, wie weit das Update ist. Zu dem Zweck hab ich mein Hauptprogramm und meinen MySQL-Importer mit den jeweiligen TCP-Komponenten ausgestattet, um miteinander zu kommunizieren:

Dazu läuft in der Hauptform meines "grossen" Progs folgendes ab:
Delphi-Quellcode:
procedure Tf_main.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
begin
  Progress.Visible := True;

  Progress.Max := StrToInt( ClientSocket.Receiveln );

  while ClientSocket.Receiveln <> 'EOFdo
  begin
    Progress.Position := StrToInt( ClientSocket.Receiveln )
  end;

  TcpServer.Active := False;
  Progress.Visible := False;

end;
FYI: Der MySQL-Importer schickt also an die IP des Hauptprogrammes zuerst die Anzahl der gesamten Datensätze und dann jeweils den aktuellen Stand der Dinge, um halt das ganze in einer Progressbar visuell dazustellen. Sieht man ja denke ich ganz einfach am Code... oder?
Der letzte String jedenfalls ist ein "EOF" damit das HAuptprogramm weiss: Hier ist SChluss. Fertig.

Nun, diese Skript läuft halt einmal durch, ohne Fehlermeldungen etc.pp. Und wenn ich dann das Programm schliesse, kommt eben die o.g. Fehlermeldung. Ich vermute mal, dass hier meine tolles "Update"-Feature irgendwo nicht ganz astrein ist, weil wenn ich das nicht ausgeführt habe, gibts die Fehlermeldung auch nicht!

Jemand ne Idee?


Danke!
Tyler
  Mit Zitat antworten Zitat