Como iniciar o SFC programaticamente no Windows Vista / 7/8?

Eu tenho tentado resolver o problema queChris Iverson estava tendo nesta outra questão Stackoverflow.

Eu quero lançarSFC (aVerificador de arquivo do sistema ferramenta) programaticamente.

Funciona no Windows XP:

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

Outras variantes queFaz trabalhe no 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"); 

O mesmo código falha no Windows 7 (com o programa de inicialização sendo executado como administrador). A janela do console aparece, mas o SFC apresenta o erro:

Windows Resource Protection could not start the repair service.

Mas se eu executar manualmentesfc /scannow a partir de umseparado prompt de comando elevado, ele funciona:

Portanto, obviamente há algo estranho acontecendo com o Windows Vista / 7/8. não sei exatamente o que. Mas provavelmente está relacionado ao UAC, UIPI, isolamento da sessão 0 ou ao fato de quejanelas do console foram executadas pelo CSRSS

Mas ainda assim, eu não entendo o problema.

Teria sido bom resolver o problema de Chris, com a possibilidade de eu querer fazer o que ele fez.

E lembre-se: Meu código já está sendo executado como administrador. Clico com o botão direito eIniciar como administrador:

Isso não significa que o problema não seja outro problema sutil relacionado ao UAC, mas não ao fato de eu estar executando como usuário padrão.

Código no aplicativo WinForms
private void button1_Click(object sender, EventArgs e)
{
    RunSfc(); 
}
Falha de 32 bits

Acontece que há uma versão de 32 bits docmd.exe e uma versão de 32 bits dosfc.exe:

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

Se você executar uma taxa de 32 bits elevadacmd, nem a versão de 32 bits nem a de 64 bits dosfc vai funcionar.

Portanto, o enigma se torna como lançar o64 bits cmd.exe de um processo de 32 bits. O que provavelmente significa que o enigma se torna comoencontrar a versão de 64 bits docmd.exe de um processo de 32 bits, dado:

você pode não estar em uma máquina de 64 bitsvocê já pode estar executando um processo de 64 bitsO Windows gosta de fingir os nomes dosSystem32 pasta com base na bit-ness do seu processo

questionAnswers(2)

yourAnswerToTheQuestion