IOResult

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Ronny58
Beiträge: 73
Registriert: So 27. Apr 2014, 20:35

IOResult

Beitrag von Ronny58 »

Hallo Zusammen,

es gibt schon einige ähnlich geartete Post in diesem Forum, die auch gelesen haben. Alle scheine mir zu sagen, dass ich mien Problem nicht lösen kann. Was will ich:
Aus meinem Programm sollen die Anwender Batch-Dateien erzeugen und diese auch mittels psexec auf einem Server ausführen.

Es wird im ersten Schritt eine komplexe Batchdatei erstellt:

Code: Alles auswählen

F:\ibm\cognos\tm1_64\bin64\tm1runti.exe -adminhost "cognos04" -Server "XXX" -CAMNamespace "XXX" -user "XXX" -pwd "xxx" -process "XXX"
Der Batch funktioniert.

Danach wird die Batchdatei auf dem Server mittels TProcess gestartet:

Code: Alles auswählen

psexec.exe \\Server \\Server\uc4_schnittstellen\TM1_Prozesse_Command.cmd -u "XXX" -p "XXX"
Das klappt im Prinzip auch

Natürlich habe ich das ganze in ein try /except gepackt. Das hat aber zur Folge, dass ich im ersten Fall über mein except nur noch die Info bekomme, dass die Datei nicht erzeugt werden konnte. Der IOResult ist immer 0. Ich habe also nicht die Spur einer Ahnung warum.

Den zweiten Fall mit dem TProcess habe ich noch nicht ausprobiert. Da gibt es wohl ein stderr. Das muss ich mir noch anschauen.

Ein stummes Programm ist ein dummes Programm.

Natürlich will ich die Fehler abfangen und selbst behandeln. Aber ich möchte auch gerne wissen und im Programm mitteilen warum ein Fehler aufgetreten ist.

z.B. fehlende Zugriffberechtigung, fehlende Laufwerksverknüpfung, Datei gesperrt, vielleicht ist die Festplatte geplatzt oder ein Timeout, … was auch immer.

Gibt es da etwas ?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 786
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IOResult

Beitrag von fliegermichl »

Man kann schon einige Informationen aus der Exception erhalten.

Code: Alles auswählen

try
 dosomethin_wrong;
except
 ON e:Exception do
 begin
  MessageDlg(Format('Fehler %s der Klasse %s - %s', [
   e.Message,
   e.Classname,
   SYSErrorMessage(GetLastError)])
  );
 end;
end;

Ronny58
Beiträge: 73
Registriert: So 27. Apr 2014, 20:35

Re: IOResult

Beitrag von Ronny58 »

Hmm..

GetLastError kennt mein Compiler nicht. Fehlt da eine Unit?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 786
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IOResult

Beitrag von fliegermichl »

Hmm ja das ist Windows spezifisch. GetLastOSError sollte aber gehen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4437
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: IOResult

Beitrag von af0815 »

fliegermichl hat geschrieben:
Mi 13. Mai 2020, 21:14
Hmm ja das ist Windows spezifisch. GetLastOSError sollte aber gehen.
GetLastOSError dürfte es nicht auf allen Plattformen geben, da ich in der sysutils.inc auf sowas gestossen bin:

Code: Alles auswählen

  {$ifdef HAS_OSERROR}
      Result:=GetLastOSError;
  {$else}
      Result:=-1;
  {$endif}
GetLastOSError ruft in der Windowsimplementation auch nur GetLastError auf und das ist Windows native. Ganz einfach, wenn es nicht da ist, nicht verwenden :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 786
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IOResult

Beitrag von fliegermichl »

Unter Linux bekommt man ja "errno" befüllt. Ich finde schon, daß man sich über den Status von Betriebssystemfunktionen informieren können sollte.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4437
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: IOResult

Beitrag von af0815 »

Ich gehe mittlerweile davon aus, das Ronny58 auf einem Windows Server das laufen lassen will (erster post). Dann sollte es gehen, man muss sich nur die richtige unit raussuchen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten