TProcess auf Citix-Serverfarm

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

TProcess auf Citix-Serverfarm

Beitrag von Ronny58 »

Ich habe schon im Netz danach gesucht und ein ähnlich geartetes Problem bei PowerShell gefunden aber keine Lösung dazu.

Ich nutze TProcess, um psexec auf einem Server auszuführen.

Der TProcess.Command führt dort ein psExec aus, der wiederum einen Batch starte (hat was mit den Pfadangaben zu tun).
In TProcess.Command steht folgendes:

Code: Alles auswählen

\\server\uc4_schnittstellen\psexec.exe \\server F:\UC4_Schnittstellen\TM1_Prozesse_Command.cmd
psexec läuft auf einem Windows Server 2012 R2 und ist dort als Dienst installiert.

Der Code im Batch sieht dann wie folgt aus:

Code: Alles auswählen

F:\ibm\cognos\tm1_64\bin64\tm1runti.exe -adminhost "XXX" -server "XXX" -CAMNamespace "Tegut" -user "XXX" -pwd "XXX" -process "TEST_TM1_Prozesse" "P0"="Test_p0" "P1"=5
Der Prozess auf dem Server wird ausgeführt und beendet (kann ich mir in der Operation-Console anschauen). Abgesehen davon sehe ich das Prozess-Ergebnis. Nun würde ich erwarten dass auch TProzess das Ende bemerkt.
Das tut er aber nicht. TProcess wird nicht beendet. Dieses Phänomen habe ich aber nur auf unserer Citrix-Serverfarm.

Starte ich das Programm lokal von meinem Laptop und führe den Prozess auf dem Server aus, wird TProzess beendet.
Ich hab zum Test den TProcess.Command auch in einen Batch geschrieben und gestartet. Läuft auch super durch.

TProcess läuft mit den Options: NoConsole und WaitOnExit, keine StartupOptions, Priority: alle durchprobiert. Auch mit den Standard-Options das gleiche.

Als wenn TProzess das Ende nicht mitbekommt. Es klappt auf einem Laptop aber klappt aber nicht auf der Citrix-Serverfarm. Kann mein Programm dann nur noch mit dem Task-Manager beenden.

Hat jemand ähnliches schon versucht? Oder eine Idee was ich machen kann?

LG Ronny

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: TProcess auf Citix-Serverfarm

Beitrag von marcov »

Ist es wirklich beendet? Gibst kein psexec in taskmgr?

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TProcess auf Citix-Serverfarm

Beitrag von Winni »

Hallo!

TProcess.Commandline hat Macken und ist als "deprecated" im Source markiert.

So geht das jetzt:

Code: Alles auswählen

AProcess.Executable := 'MyExe.exe';
Und dann die einzelnen Parameter in die Stringlist einfügen:

Code: Alles auswählen

AProcess.Parameters.Add(option1);
AProcess.Parameters.Add(option2);
....
Hierbei ist wichtig, dass keine Option ein Leerzeichen enthält.
Dann muss das in 2 Options zersägt werden.

Winni

DonAlfredo
Beiträge: 74
Registriert: Do 28. Sep 2017, 10:26

Re: TProcess auf Citix-Serverfarm

Beitrag von DonAlfredo »

Another possibility to try. In your batch script.
Orig: F:\ibm\cognos\tm1_64\bin64\tm1runti.exe .........
Try: call F:\ibm\cognos\tm1_64\bin64\tm1runti.exe .........

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

Re: TProcess auf Citix-Serverfarm

Beitrag von Ronny58 »

@Winni
Ist durchgelaufen und bleibt dann am Ende genauso hängen.
Laptop Lokal: Findet ein Ende
Serverfarm: Findet kein Ende

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

Re: TProcess auf Citix-Serverfarm

Beitrag von Ronny58 »

gleiches gilt für die Empfehlung von DonAlfredo

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

Re: TProcess auf Citix-Serverfarm

Beitrag von Ronny58 »

Der hier macht es korrekt:

Code: Alles auswählen

ExecuteProcess('\\Server\uc4_schnittstelle\psexec.exe',['server','f:\uc4_schnittstellen\TM1-Prozesse_Command.cmd']);
Liefert mir zwar während des Laufs eine Dos-Fenster mit dem Batch, ist aber OK. So sieht der Anwender das etwas läuft. Auch wenn natürlich Passwort und Benutzername im Klartext im Batch stehen.

Aber da passt etwas wohl auf der Serverfarm in der Batch-Ende-Kommunikation zu TProcess etwas nicht.

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

Re: TProcess auf Citix-Serverfarm

Beitrag von af0815 »

Ich habe sowas ähnliches mit eine TProcess und gstreamer unter Linux gehabt, das ich kein Ende in der Kommunikation gefunden habe und WaitOnExit nicht richtig funktioniert hat. So wie hier. Aktuell habe ich mir einen Watchdog dazugemacht, der nach einiger Zeit in der Prozessliste nachsieht ob der Prozess noch lebt. Wenn nicht, habe ich das ganze abgebrochen. Ist Q&D, dafür läuft es.
Bei gstreamer dürften die Subthreads die Messages erzeugen und da dürfte TProcess damit Probleme haben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TProcess auf Citix-Serverfarm

Beitrag von Winni »

Hi!

Bevor Du den Process killst, kann Du ja auch noch eine terminate probieren:

Zeit holen
Wenn MaxWarteZeit überschritten then
AProcess.Terminate (666);

Man darf auch etwas anderes als 666 für den zurückgegebenen ExitCode nehmen.
ExitCode geht sowieso nur in Windows.

Gruß
Winni

Antworten