¿Cómo lanzar SFC programáticamente en Windows Vista / 7/8?

He estado tratando de resolver el problema queChris Iverson estaba teniendo en esta otra pregunta de Stackoverflow.

Quiero lanzarSFC (laComprobador de archivos de sistema herramienta) programáticamente.

Funciona en Windows XP:

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

Otras variantes quehacer trabajar bajo 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"); 

El mismo código falla en Windows 7 (con el programa de inicio ejecutándose como administrador). Aparece la ventana de la consola, pero SFC da el error:

Windows Resource Protection could not start the repair service.

Pero si ejecuto manualmentesfc /scannow a partir de unaseparar símbolo del sistema elevado, funciona:

Entonces obviamente hay algo extraño sucediendo con Windows Vista / 7/8. No sé qué, exactamente. Pero es probable que esté relacionado con UAC, UIPI, la sesión 0 isoloation, o el hecho de quelas ventanas de la consola fueron ejecutadas por CSRSS

Pero aún así, no entiendo el problema.

Hubiera sido bueno resolver el problema de Chris, en la remota posibilidad de que quisiera hacer lo que él hizo.

Y recuerda: Mi código ya se está ejecutando como administrador. Hago clic derecho yLanzar como administrador:

Eso no significa que el problema no sea otro problema sutil relacionado con UAC, pero no se debe al hecho de que me esté ejecutando como un usuario estándar.

Código en la aplicación WinForms
private void button1_Click(object sender, EventArgs e)
{
    RunSfc(); 
}
32 bits falla

Resulta que hay una versión de 32 bits decmd.exe y una versión de 32 bits desfc.exe:

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

Si ejecuta un elevado de 32 bitscmd, ni la versión de 32 bits ni la de 64 bits desfc trabajará.

Así que el enigma se convierte en cómo lanzar el64 bits cmd.exe a partir de un proceso de 32 bits. Lo que probablemente significa que el enigma se convierte en cómoencontrar la versión de 64 bits decmd.exe a partir de un proceso de 32 bits, dado:

puede que no estés en una máquina de 64 bitses posible que ya esté ejecutando un proceso de 64 bitsWindows le gusta falsificar los nombres de laSystem32 Carpeta basada en los bits de tu proceso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta