ich habe auf C:\ in einem Verzeichnis, in dem von einer Java-Anwendung (nicht von mir entwickelt) mehrere Versionen liegen.
Jede Version der Anwendung hat ein separates Verzeichnis mit dem entsprechenden Kompilierungsdatum im Namen.
In jedem dieser Unterverzeichnisse liegt eine Start.bat Datei, mit der ich das Java-Programm starten kann.
Beispiel:
C:\Programm\2011.11.11_12-04-17\start.bat
C:\Programm\2011.11.30_09-00-35\start.bat
Ich habe ein Lazarus-Programm geschrieben, das diese verschiedenen Versionen verwaltet (Versionen löschen, schöner formatierte Anzeige der gefundenen Versionen, etc).
Unter anderem Starte ich auch die einzelnen Programme über folgende Methode:
Code: Alles auswählen
//------------------------------------------------------------------------------
// Lade eine externe Anwendnug
//------------------------------------------------------------------------------
function TfrmMainForm.LaunchApplication ( aCommandLine: string ): boolean;
var
AProcess: TProcess;
begin
AProcess := TProcess.Create ( nil );
AProcess.CommandLine := aCommandLine;
AProcess.Execute;
AProcess.Free;
end;
Das ganze funktioniert vom Aufruf her einwandfrei.
Jedoch gehen die Batch-Dateien (stammen nicht von mir) davon aus, dass sie aus dem entsprechenden Verzeichnis heraus gestartet werden.
Rufe ich also die start.bat aus dem Verzeichnis C:\Programm\2011.11.11_12-04-17\ auf, geht die Batch-Datei davon aus, dass ich bereits im Verzeichnis C:\Programm\2011.11.11_12-04-17\ bin.
Da ich das nicht bin, läuft die Batch-Datei auf einen Fehler.
Ich habe daher eine Methode geschrieben, die an den Anfang der Batch-Datei die folgenden Zeilen einträgt:
Code: Alles auswählen
@echo off
c:
cd \
cd \Programm\2011.11.11_12-04-17\
rem -----------------------------------------------
@echo on
Auch das funktioniert einwandfrei.
Aber das Modifizieren von Batch-Dateien ist doch ein recht umständlicher Weg.
Er funktioniert zwar, aber dafür müsste es doch eine elegantere Variante geben, oder?
Also ein Aufruf von Externen Anwendungen, bei dem man gleichzeitig das Arbeitsverzeichnis setzen kann.
Gibt es so etwas?
Noch eine Info:
Ich und meine Kollegen laden uns bei Bedarf verschiedene Versionen dieser Anwendung herunter.
Daher muss das ganze Dynamisch funktionieren, da ich nicht weiß, welche Versionen meine Kollegen auf ihrem Rechner haben.
Danke für die Hilfe!
Gruß
OLLI