Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11 (https://www.delphipraxis.net/210524-externer-prozess-nicht-moeglich-bei-shellexecuteex-win11.html)

hoika 6. Mai 2022 14:09

"Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Hallo,
ich bekomme beim Aufruf einer Bat-Datei per ShellExecuteEx unter Win11 die obige Fehlermeldung.

Aber nur an einem einzigen Rechner.
Und klar ist das ein Kunden-Rechner ... ;(

Ich habe den Windows Defender im Verdacht, ein externer Virenscanner ist nicht drauf.
Ich finde aber keine Einstellung für geblockte Programme nicht.

Irgendwie hat sich auch die ganze Oberfläche bei Win11 nat. wieder geändert ...


Hat jemand einen Tipp für mich?


PS:
Das Programm selbst läuft ohne Probleme.
Auch der Start z.B. von gbak (Backup-Programm von Firebird) klappt.

Der schöne Günther 6. Mai 2022 14:29

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Google liefert keinen einzigen Treffer für "externer prozess nicht möglich".
Bist du dir sicher dass das die Fehlermeldung ist? Noch besser wäre der Rückgabewert von
Delphi-Quellcode:
ShellExecuteEx()
, dann müsste man nicht erst Textbausteine rückübersetzen und zu Fehlercodes zuordnen...

Falls du den Rückgabewert im Fehlerfall nicht mitloggst kann man vlt. im Windows Event Log etwas finden.

hoika 6. Mai 2022 14:37

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Hallo,
stimmt, eines der Eventlogs müsste den haben.

Danke

hoika 6. Mai 2022 15:35

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Hallo,

toll, Fehlermeldung wurde von uns "erfunden"

Delphi-Quellcode:
if CreateProcess then
begin
end
else
begin
  MessageBox(.. "externer Prozess nicht möglich");
end;
Und nein, nat. wird GetLastError nicht ausgewertet und angezeigt oder geloggt ...

DeddyH 6. Mai 2022 15:43

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Normalerweise schreibt man dann aber „Es ist ein Fehler aufgetreten“, so dass man gleich weiß, dass man an der Stelle geschlampt hat <sarcasm off>.

Bernhard Geyer 6. Mai 2022 15:44

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Zitat:

Zitat von DeddyH (Beitrag 1505541)
Normalerweise schreibt man dann aber „Es ist ein Fehler aufgetreten“, so dass man gleich weiß, dass man an der Stelle geschlampt hat <sarcasm off>.

Ach komm. So genau will es doch keiner Wissen.

GetLastErrorCode schon ausgewertet?
Das ist bei sowas zwingend abzufragen.
Am besten im Programm in Logdatei schreiben lassen, falls man die Nummer dem Anwender nicht zumutet.

himitsu 6. Mai 2022 17:04

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Ist das nun der Fehlercode von ShellExecute, oder kommt der Fehler in der Batch?
OK, sowas macht man natürlich nicht.
GetLastError, SysErrorMessage, RaiseLastOSError und dann Fehlercode mit Nummer, Text und einem Zusatztext, damit man weiß wo im Programm (wenn man nicht schon Fehlerdialog mit Debuginfos hat)

Fehlerbehandlung mit MessageBoxen ist eh total krank, da man dort nicht mit TryFinally arbeiten kann.



Statt .BAT ein .CMD probiert? :freak:

CreateProcess statt ShellExecute.

....



Ist das Programm unsigniert
oder hat "böse" Wörter im Namen (setup usw.),
bzw. wie heißt die Batch?


Echt mal, warum kommt niemand auf die Idee den ErrorCode mit auszugeben?
Oder schaut selber nach, welcher Fehler das ist und gibt eine suchbare Bezeichnung an?
Der engliche Text oder den Name der Konstante, so ala ERROR_NO_PROC_SLOTS.




"geht nicht" oder einfach ein TerminateProcess als Reaktion, reicht vollkommen aus, wenn man sowieso zu nix Lust hat. (Letzteres macht Eurekalog und Co. auch gern, wenn ihnen was nicht gefällt)

hoika 6. Mai 2022 19:27

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Hallo,
nat. ist die Exe signiert (extended val.). pah ;)

GetLastError, und der ganze andere Kram, pah

OK, mein Vorgänger kannte das nicht wirklich ...

Zitat:

warum kommt niemand auf die Idee den ErrorCode
Weil es auf dem eigenem Rechner und keinem Testrechner der Firma auftritt, Herr Naseweis

Nein, im Ernst, es zeigt wieder.
Aufruf fremden Codes komplett kapseln.

jaja, olle Besserwisser ;)

himitsu 6. Mai 2022 20:18

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Och, kapseln ist nicht unbedingt nötig, aber eine gute Fehlerbehandlung (ordentliche Auswertung aller Rückgabewerte) ist Gold wert.

Hätte man aber vorher die Fehlerbehandlung halbwegs richtig gemacht, dann hätte man jetzt mehr Infos ... gerade weil es ein Kundensystem ist und ihr in dem Moment nicht davor sitzt. :zwinker:

himitsu 6. Mai 2022 20:26

AW: "Externer Prozess nicht möglich" bei ShellExecuteEx, Win11
 
Delphi-Quellcode:
if not CreateProcess(...) then
  RaiseLastOSError; // das Minimum, was man nach Belieben ausbauen kann
...

Delphi-Quellcode:
if not CreateProcess(...) then begin
  Err := GetLastError;
  //raise Exception.CreateFmt('irgendwas: %d %s', [Err, SysErrorMessage(Err)]);
  E := EOSError.Create('irgendwas: ' + SysErrorMessage(Err));
  E.ErrorCode := Err; // ja, ist irgendwie total krank, dass Borland/Codegear/Embarcadero seit Jahrzehnten die passenden überladenen Contructoren vergessen hat.
  raise E;
end;
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz