![]() |
sfc.exe mit CreateProcess() starten klappt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Ich versuche unter Delphi 7 sfc.exe /verifyonly mit CreateProcess zu starten und die Ausgabe in ein TMemo umzuleiten. Den Code dazu habe ich hier im Forum gefunden. Es klappt jedoch nicht. Wenn ich mit cmd.exe eine Console aufmache und sfc.exe /verifyonly starte kommt Beginning system scan. This process will take some time. Mache ich es über meine App, dann kommt statt dessen Windows Resource Protection could not start the repair service. Es kann nicht an Zugriffsrechten liegen, weil bei meinem Win7 x64 UAC aus ist. Woran liegt es? Habe Beispielprojekt angehängt.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function GetConsoleOutput(const Command: String; var Output,Errors: TMemo): Boolean; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; SecurityAttr: TSecurityAttributes; PipeOutputRead: THandle; PipeOutputWrite: THandle; PipeErrorsRead: THandle; PipeErrorsWrite: THandle; Succeed: Boolean; Buffer: array [0..255] of Char; NumberOfBytesRead: DWORD; Stream: TMemoryStream; begin //Initialisierung ProcessInfo FillChar(ProcessInfo, SizeOf(TProcessInformation), 0); //Initialisierung SecurityAttr FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0); SecurityAttr.nLength := SizeOf(SecurityAttr); SecurityAttr.bInheritHandle := true; SecurityAttr.lpSecurityDescriptor := nil; //Pipes erzeugen CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0); CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0); //Initialisierung StartupInfo FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.hStdInput := 0; StartupInfo.hStdOutput := PipeOutputWrite; StartupInfo.hStdError := PipeErrorsWrite; StartupInfo.wShowWindow := sw_Hide; StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; if CreateProcess(nil, PChar(Command), nil, nil, true, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin result:=true; //Write-Pipes schließen CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsWrite); //Ausgabe Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Output.Lines.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeOutputRead); //Fehler Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Errors.Lines.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeErrorsRead); WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); end else begin result:=false; CloseHandle(PipeOutputRead); CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsRead); CloseHandle(PipeErrorsWrite); end; end; procedure TForm1.Button1Click(Sender: TObject); begin GetConsoleOutput(edit1.Text,memo1,memo2); end; end. |
AW: sfc.exe mit CreateProcess() starten klappt nicht
Zitat:
"Sie müssen als Administrator angemeldet sein und eine Konsolensitzung ausführen, um das SFC-Hilfsprogramm verwenden zu können." |
AW: sfc.exe mit CreateProcess() starten klappt nicht
Manifest dazu legen, welches die Ausführung als Administrator erzwingt.
|
AW: sfc.exe mit CreateProcess() starten klappt nicht
Ich bin als Admin eingelogt, und UAC is aus, also wird doch alles automatisch mit Admin rechten ausgeführt. cmd.exe zeigt soft in der Caption Administrator an.
|
AW: sfc.exe mit CreateProcess() starten klappt nicht
|
AW: sfc.exe mit CreateProcess() starten klappt nicht
Danke für den Link (gleiches Problem). Aber was anstatt CreateProcess()?
|
AW: sfc.exe mit CreateProcess() starten klappt nicht
Zitat:
Er sagt das es gut funktioniert. Zitat:
Unter Win7 Zitat:
|
AW: sfc.exe mit CreateProcess() starten klappt nicht
Zitat:
![]() |
AW: sfc.exe mit CreateProcess() starten klappt nicht
Zitat:
Und mit dem Manifest funktioniert die verlinkte Anwendung auch. TrustedInstaller wird gestartet. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz