Announcement

Collapse
No announcement yet.

Windows 2000: Problem Verzeichnis umbenennen innerhalb eines Threads

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows 2000: Problem Verzeichnis umbenennen innerhalb eines Threads

    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

  • #2
    Hallo,

    &gt;Wieso läßt Windows 2000 das umbennen nicht zu?

    dieser Effekt hat nichts mit den Threads zu tun, denn er kann jederzeit mit einem ganz normalen Delphi-Programm reproduziert werden. Wenn Delphi ein Projekt einmal geöffnet hat, darf dieses Verzeichnis erst dann umbenannt/gelöscht werden, wenn Delphi entweder <br>
    a) als Prozess geschlossen wurde, oder <br>
    b) das <b>Arbeitsverzeichnis</b> wechselt.

    Ich würde daher zuerst versuchen, ob der Aufruf von <b>SetCurrentDir</b> etc. (Wechsel in ein anderes Verzeichnis) ausreicht, damit das Verzeichnis umgenannt werden kann

    Comment


    • #3
      Hallo Andreas,<p>
      danke für deine Antwort. Sie löst zwar mein Problem nicht, denn das ist doch etwas vielschichtiger. Ich wollte dir hier noch eine genauere Beschreibung des Problems erstellen, dabei bin ich auf die Ursache gestoßen.<p>
      Ich verwende die Komponente TDosCommand von Maxime Collomb um Kommandozeilen-Tools auszuführen und deren Ausgaben in ein MemoFeld umzuleiten. Zuerst dachte diese Komponente wäre generell dran Schuld, jetzt habe ich aber herausgefunden, daß diese Zugriffsverweigerung nur dann auftritt, wenn ich zwei Datenbank-Uitilities damit aufrufe. Diese Uitilities gehören zu unserem eigenen Produkt dtF. Ein relationales DB-System, von dem sicher noch niemand etwas gehört hat. War aber lange Jahre frei verfügbar. Wenigstens weiß ich jetzt mal, wo ich anpacken muß.<p>
      Gruß<p>
      Wolfgang Rolle

      Comment

      Working...
      X