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-Anwendungprivate void button1_Click(object sender, EventArgs e)
{
RunSfc();
}
32-Bit schlägt fehlEs stellte sich heraus, dass es eine 32-Bit-Version von gibtcmd.exe
und eine 32-Bit-Version vonsfc.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:
System32
Ordner basierend auf der Bit-Ness Ihres Prozesses