Wie starte ich SFC programmgesteuert unter Windows Vista / 7/8?

Ich habe versucht, das Problem zu lösenChris Iverson hatte in dieser anderen Stackoverflow-Frage.

Ich möchte startenSFC (dasSystemdateiprüfung programmatisch.

Es funktioniert unter Windows XP:

private void RunSfc()
{
    ProcessStartInfo startInfo ,= new ProcessStartInfo("cmd", "/K sfc.exe /scannow");
    System.Diagnostics.Process.Start(startInfo);
}

Andere Varianten dasmachen Arbeit unter Windows XP:

//Launch SFC directly
ProcessStartInfo startInfo = new ProcessStartInfo("sfc.exe", "/scannow"); 
System.Diagnostics.Process.Start(startInfo);

//Use full path to SFC
String sfcPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sfc.exe");
ProcessStartInfo startInfo = new ProcessStartInfo(sfcPath, "/scannow"); 

Derselbe Code schlägt unter Windows 7 fehl (wobei das Startprogramm als Administrator ausgeführt wird). Das Konsolenfenster wird angezeigt, aber SFC gibt den Fehler aus:

Windows Resource Protection could not start the repair service.

Aber wenn ich manuell rennesfc /scannow von einemtrennen Eingabeaufforderung mit erhöhten Rechten, es funktioniert:

Mit Windows Vista / 7/8 passiert also offensichtlich etwas Merkwürdiges. Ich weiß nicht genau was. Aber es hängt wahrscheinlich mit der Benutzerkontensteuerung, der UIPI, der Isolation von Sitzung 0 oder der Tatsache zusammen, dassKonsolenfenster wurden von CSRSS ausgeführt

Trotzdem verstehe ich das Problem nicht.

Es wäre schön gewesen, Chris 'Problem zu lösen, wenn ich nicht die Chance gehabt hätte, das zu tun, was er getan hat.

Und merke dir: Mein Code wird bereits als Administrator ausgeführt. Ich klicke mit der rechten Maustaste undAls Administrator starten:

Das bedeutet nicht, dass das Problem kein anderes subtiles Problem im Zusammenhang mit der Benutzerkontensteuerung ist, aber es liegt nicht an der Tatsache, dass ich als Standardbenutzer arbeite.

Code in der WinForms-Anwendung
private void button1_Click(object sender, EventArgs e)
{
    RunSfc(); 
}
32-Bit schlägt fehl

Es stellte sich heraus, dass es eine 32-Bit-Version von gibtcmd.exe und eine 32-Bit-Version vonsfc.exe:

C: \ Windows \ SysWOW64 \ cmd.exeC: \ Windows \ SysWOW64 \ sfc.exe

Wenn Sie ein erhöhtes 32-Bit ausführencmdWeder die 32-Bit- noch die 64-Bit-Version vonsfc wird funktionieren.

So wird das Rätsel, wie man das startet64-Bit cmd.exe von einem 32-Bit-Prozess. Was wahrscheinlich bedeutet, dass das Rätsel wird, wie es gehtfinden die die 64-bit version voncmd.exe von einem 32-Bit-Prozess gegeben:

Sie befinden sich möglicherweise nicht auf einem 64-Bit-ComputerMöglicherweise führen Sie bereits einen 64-Bit-Prozess ausWindows fälscht gerne die Namen derSystem32 Ordner basierend auf der Bit-Ness Ihres Prozesses

Antworten auf die Frage(2)

Ihre Antwort auf die Frage