Hallo,<p>
ein bißchen Vorgeschichte: Ich habe einen Interpreter für eine primitive Skriptsprache entwickelt um unseren Entwicklungsprozess zu automatisieren (aus CVS auschecken, Entwicklungsumgebung compilieren, Applikation zusammen bauen usw.) Das Delphi-Programm (Interpreter) wird gestartet und zeigt zunächst das auszuführende Skript an. Das Ausführen findet in einem separaten Thread statt. Der Benutzer soll die Möglichkeit haben das Skript zu stoppen.<p>
Das Problem ist, daß zunächst das Projekt-Verzeichnis umbenannt wird. Dies geschieht mit Hilfe der API-Funktion MoveFile(). Danach wird beim Auschecken aus CVS ein neues Projekt-Verzeichnis erzeugt. Dann wird auf diesem Verzeichnis gearbeitet, d.h. es werden weitere Threads erzeugt die auf dieses Verzeichnis zugreifen und das Make auf rufen usw. Am Schluß soll das Projekt-Verzeichnis umbenannt werden. Dabei kommt es zum Systemfehler: "Zugriff verweigert" geliefert von SysErrorMessage(GetLastError), obwohl die Threads inzwischen alle beendet und wieder zerstört wurden. Läuft das ganze in der IDE, so muß zuerst Delphi geschlossen werden und weider gestartet werden, erst danach kann das Skript das Verzeichnis umbenennen. Läuft das Programm alleine, reicht das Beenden und Neustarten des Programms.<p>
Wieso läßt Windows 2000 das umbennen nicht zu? Die Threads die zusätzlich irgendwas mit diesem Verzeichnis gemacht haben gehören doch zu meiner eigenen Applikation. Bin für jeden Hinweis dankbar.<p>
Gruß<p>
Wolfgang Roller
ein bißchen Vorgeschichte: Ich habe einen Interpreter für eine primitive Skriptsprache entwickelt um unseren Entwicklungsprozess zu automatisieren (aus CVS auschecken, Entwicklungsumgebung compilieren, Applikation zusammen bauen usw.) Das Delphi-Programm (Interpreter) wird gestartet und zeigt zunächst das auszuführende Skript an. Das Ausführen findet in einem separaten Thread statt. Der Benutzer soll die Möglichkeit haben das Skript zu stoppen.<p>
Das Problem ist, daß zunächst das Projekt-Verzeichnis umbenannt wird. Dies geschieht mit Hilfe der API-Funktion MoveFile(). Danach wird beim Auschecken aus CVS ein neues Projekt-Verzeichnis erzeugt. Dann wird auf diesem Verzeichnis gearbeitet, d.h. es werden weitere Threads erzeugt die auf dieses Verzeichnis zugreifen und das Make auf rufen usw. Am Schluß soll das Projekt-Verzeichnis umbenannt werden. Dabei kommt es zum Systemfehler: "Zugriff verweigert" geliefert von SysErrorMessage(GetLastError), obwohl die Threads inzwischen alle beendet und wieder zerstört wurden. Läuft das ganze in der IDE, so muß zuerst Delphi geschlossen werden und weider gestartet werden, erst danach kann das Skript das Verzeichnis umbenennen. Läuft das Programm alleine, reicht das Beenden und Neustarten des Programms.<p>
Wieso läßt Windows 2000 das umbennen nicht zu? Die Threads die zusätzlich irgendwas mit diesem Verzeichnis gemacht haben gehören doch zu meiner eigenen Applikation. Bin für jeden Hinweis dankbar.<p>
Gruß<p>
Wolfgang Roller
Comment