Entwickler-Ecke
Windows API - Zugriffsverletzung in CreateProcess - GetConsoleOutput
Webo - Di 15.02.11 11:54
Titel: Zugriffsverletzung in CreateProcess - GetConsoleOutput
Moin, moin ...
Ich experimentiere grade mit
diesem Code [
http://www.delphi-treff.de/tipps/system/prozesse/ausgabe-der-konsole-in-meinem-programm-anzeigen/] herum. Allerdings funktioniert es bei mir schon so nicht, wie er da steht. Ich weiß, dass ich damit früher schonmal rumgespielt habe und da hat es funktioniert.
So, zum Fehler: Ich habe zuerst einfach das Beispiel von dort genommen. Es kommt aber eine Zugriffsverletzung, siehe Anhang. Das passiert unter Windows 7, als auch in einer XP-VM. Ich bin das mal durchgegangen und der Fehler tritt in der Zeile
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| if CreateProcess(nil, PChar(Command), nil, nil, True, CreationFlags, nil, nil, StartupInfo, ProcessInfo) then begin |
auf.
Jetzt bin ich irgendwie ratlos, wie ich den Fehler beheben könnte. Vielleicht weiß von Euch jmd Rat ?
MfG
Webo
PS: Ausführen als Administrator brachte auch keinen Erfolg.
jaenicke - Di 15.02.11 12:39
Das ist bestimmt ein Unicodeproblem, wenn du D2010 grad nutzt. Ich kanns grad nicht testen, versuchs erst einmal mit Ansistrings, ich schaue es mir zu Hause einmal an:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function GetConsoleOutput(const Command : AnsiString; Output, Errors : TStringList) : Boolean; var Buffer : array[0..255] of AnsiChar; StartupInfo : TStartupInfoA;
...
if CreateProcessA(nil, PAnsiChar(Command), ... |
// EDIT:
Die Deklaration in Delphi ist falsch bzgl. Unicode, siehe MSDN Doku, mehr heute Abend...
// EDIT2:
http://www.delphifeeds.com/go/s/62569
Webo - Mi 16.02.11 12:46
Danke für die Antwort. Warum es nicht funktioniert habe ich jetzt verstanden, aber wie genau ändert man das ? Auf der verlinkten Seite steht ja, dass man sich zwei neue, überladene Funktionen nutzen muss. Nur wie ? :D
jaenicke - Fr 18.02.11 12:17
Einfachster Fix:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| if CreateProcess(nil, PChar(Command + ''), nil, nil, True, CreationFlags, nil, nil, StartupInfo, ProcessInfo) then begin |
Webo - Fr 18.02.11 19:30
Funktioniert. Dankeschön! 8)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!