Jak programowo uruchomić SFC w systemie Windows Vista / 7/8?
Próbowałem rozwiązać ten problemChris Iverson miał w tym innym pytaniu Stackoverflow.
Chcę wystartowaćSFC
(Kontroler plików systemowych narzędzie) programowo.
Działa w systemie Windows XP:
private void RunSfc()
{
ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/K sfc.exe /scannow");
System.Diagnostics.Process.Start(startInfo);
}
Inne wariantyrobić działa pod 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");
Ten sam kod nie działa w systemie Windows 7 (przy uruchomionym programie uruchamiającym jako administrator). Pojawi się okno konsoli, ale SFC daje błąd:
Windows Resource Protection could not start the repair service.
Ale jeśli ręcznie uruchomięsfc /scannow
ododdzielny Podwyższony wiersz polecenia, działa:
W systemie Windows Vista / 7/8 jest oczywiście coś dziwnego. dokładnie nie wiem co. Ale jest to prawdopodobnie związane z UAC, UIPI, izoloacją sesji 0 lub faktem, żeokna konsoli były uruchamiane przez CSRSS
Ale nadal nie rozumiem tego problemu.
Byłoby miło rozwiązać problem Chrisa, nie mając szansy, że chcę zrobić to, co zrobił.
I pamiętaj: Mój kod już działa jako administrator. Kliknij prawym przyciskiem myszy iUruchom jako administrator:
To nie znaczy, że problem nie jest jakimś innym subtelnym problemem związanym z UAC, ale nie jest to spowodowane faktem, że pracuję jako standardowy użytkownik.
Kod w aplikacji WinFormsprivate void button1_Click(object sender, EventArgs e)
{
RunSfc();
}
32-bitowy błądOkazuje się, że jest 32-bitowa wersjacmd.exe
i 32-bitowa wersjasfc.exe
:
Jeśli uruchomisz podwyższony 32-bitcmd, ani wersja 32-bitowa ani 64-bitowasfc będzie działać.
Tak więc zagadką staje się, jak uruchomić64-bit cmd.exe
z procesu 32-bitowego. Co prawdopodobnie oznacza, że zagadka staje się jakodnaleźć 64-bitowa wersjacmd.exe
z procesu 32-bitowego:
System32
folder oparty na bitości procesu