c++ createprocess als administrator und erhalten Sie Ihre Ausgabe
Ich habe ein problem, ich habe auf der Suche nach zwei Dinge müssen zusammen gehen, laufen, einem Prozess, durch den Createprocess()
als administrator und erhalten die Ausgabe.
Wenn ich das Google, wie CreateProcess()
als administrator bekomme ich die antwortenden zu verwenden shellexecute
. Ich gehe zu shellexecute
, während ich da bin, shellexecute keine Ausgabe, was lief auf der Konsole(Prozess).
Ich Google wieder wie bekomme ich die Ausgabe von einem Prozess mit shellexecute, bekomme ich Antworten, die sagen, Sie können tun, dass mit shellexecute, createprocess verwenden, also gehe ich von createprocess. Ich bin kämpfen, um zu konvertieren, was ich Tue, mit shellexecute auf createprocess.
Was mache ich mit shellexecute macht das, was ich Suche, als administrator ausführen. aber keine Ausgabe.
Hier ist mein shellexecute-code.
SHELLEXECUTEINFO si = {0};
si.cbSize = sizeof(SHELLEXECUTEINFO);
si.fMask = SEE_MASK_NOCLOSEPROCESS;
si.hwnd =NULL;
si.lpVerb = "runas";
si.lpFile = "netsh.exe";
si.lpParameters = "advfirewall firewall add rule name=\"dummy_rule\" action=allow protocol=TCP dir=in localport=3300";
si.lpDirectory=NULL;
si.nShow=SW_SHOW;
si.hInstApp =NULL;
ShellExecuteEx(&si);
WaitForSingleObject(si.hProcess, INFINITE);
CloseHandle(si.hProcess);
Dieser code läuft in einer Methode, und was es tut, ist das hinzufügen einer firewall-Regel um einen port zu öffnen für imcoming-verbindungen. Es ist in Ordnung, wie es ist, das problem ist, dass ich nicht weiß, ob der Prozess erfolgreich war, nicht shellexecute. also brauche ich die Ausgabe.
- Hallo, könnten Sie finden keine Lösung für das problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen die
CreateProcessElevated()
- Funktion von diesem Artikel:Vista UAC: The Definitive Guide
Es hat die gleichen Funktionen wie
CreateProcess()
aber bietet dierunas
FunktionalitätShellExecute()
, dh, dass der Benutzer die UAC-elevation-Anmeldeinformationen.Dein code tatsächlich Schafft zwei-Prozess
runas.exe
undnetsh.exe
, wo könnte es schaffen, nur eine statt . Der richtige Weg, das zu tun, wäre:LogonUser()
Funktionen mit den Administrator-Anmeldeinformationen, um sich ein administratortoken.CreateProcessAsUser()
mit Ihrer IO-Umleitung und der oben genannten token.beachten Sie, dass für
CreateProcessAsUser()
sollten Sienetsh.exe
als der Prozess, den Sie möchten, um zu führen, und Ihr argument inLPTSTR lpCommandLine
.GUI
Anwendung aufgefordert, ein Formular für Sie.