Hi himitsu,
Diese Batch Datei, mitsamt dem Java commandtool, wurde uns vom Hersteller so übergeben.
Um kompatibel zu bleiben habe ich das halt so realisiert.
An alle die mir geholfen haben:
ich habe den Fehler gefunden, jedoch wäre es mir noch lieber wenn
ich auch die Ursache kennen würde.
Mir ist aufgefallen, dass es im createprocess einen parameter gibt, der den aktuellen Pfad enthält.
In meinem Aufruf stand da nur nil drin.
Ersetzt man den mit Pfeilen gekennzeichneten Parameter durch nil, funktioniert das ganze auf IBM Laptops auf
HP Laptops nicht.
Ich gehe davon aus, dass die cmd shell sich nach dem Aufruf in irgendeinen subshare befindet, aber nicht in meinem Programmverzeichnis.
Delphi-Quellcode:
if CreateProcess(nil, PChar(command), nil, nil, true,
CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or REALTIME_PRIORITY_CLASS, nil, --->pchar(directory)<-----,
StartupInfo, ProcessInfo) then
begin
...
Dies ist mein Aufruf:
Delphi-Quellcode:
dstr:='/c uploadtool.bat -i '+par[2]+' -f '+par[1]+' -t '+par[3]+' -p '+edit1.text+' -d';
GetConsoleOutput('cmd '+dstr,actpath,c,d);
Zitat:
The CreateProcess function creates a new process and its primary thread. The new process executes the specified executable file.
BOOL CreateProcess(
LPCTSTR lpApplicationName, // pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
BOOL bInheritHandles, //
handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
Wenn jetzt noch jemand die Ursache (bzw die Umgebungsvariable) kennt die das verursacht wäre ich richtig glücklich.
Grüsse
Rainer