Zitat von
Luckie:
Also GetLastError ist nicht null?
Ich hab' den Zahlwert nicht überprüft, aber er sagt mir schon richtig, daß Passwort oder Username falsch sind und nicht, daß der Vorgang korrekt abgeschlossen wurde.
Zitat von
Luckie:
Aber wo liegt da der Unterschied zu meinem urspünglichem Code?
Inhaltlich könnte man meinen, es gebe keinen, aber ich werte GetLastError() in der Funktion aus, in der auch der CreateProcessWithLogonW() aufgerufen wird, das ist der einzige Unterschied. Das Problem tritt wie gesagt dadurch auf, daß intern SysFreeString() aufgerufen wird, was den Wert von GetLastError() beeinflusst (ich habe es getestet, es ist definitiv so), auch wenn dieses Verhalten mit keinem Wort irgendwo erwähnt wird.
Zitat von
Luckie:
Du hast übrigens Windows XP oder?
Ja, das sollte aber egal sein, da ich bei den anderen Methoden die gleichen Ergebnisse wie du erhalte.
Zitat von
Luckie:
Als ich es getrennt ausprobiert habe, also Anwnedung und CommandLine separate angegeben habe, hat er die Coomadline nicht verarbeitet, denn ich meinen, deinen Code hatte icfh auch schon mal ausprobiert.
Dann bastelst du halt die Commandline aus der Anwendung und den Parameter zusammen, dürfte nichts ändern. Das Problem liegt im String-Handling von Delphi (deswegen geht auch der C-Code, denn C macht so einen Blödsinn nicht) und nicht in der grundsätzlichen Verwendung von CreateProcessWithLogonW(). Was du aber probieren könntest ist, komplett mit PWideChars zu arbeiten, schließlich kriegst du aus den Controls über die
API auch nur Pointer und keine delphi-like WideStrings. Mit anderen Worten: Wenn du das String-Handling von Delphi umgehst, brauchst du vielleicht nicht GetLastError() in der CreateProcessAsLogon()-Funktion aufrufen und zurückgeben, sondern es nach dem Aufruf auswerten.