Eventuell das Problem?
SetCurrentDirectory(PWideChar(sFullPath));
Jep, das ist ein Problem. Sinnvoller/besser ist es, wenn du ShellExecute das Arbeitsverzeichnis in lpDirectory übergibst. Oder gibt es einen Grund, warum dein Programm ebenfalls dieses Verzeichnis als aktuelles Verzeichnis setzen müsste?
Grüße
Dalai