Der Fehlercode wird von Windows in einem Error Dialog angezeigt. Ist also kein GetLastError.
CreateProcessWithLogon ist keine Option, in einem Service ist es nicht verfügbar

(es wäre schöner eine Lösung anstatt mehrere zu haben).
AH bei dir steht das SE_IMPERSONATE_NAME für CreateProcessWithToken benötigt wird. Das bekomm ich sicherlich noch hin(wie ich die Privilegien setzen kann habe ich schon raus).
Was immer funktioniert hat war LOGON32_LOGON_BATCH bei LogoinUser. Dann liefen die Programme, aber halt ohne Fenster^^