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?
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)