Eu faço exatamente o mesmo que você está fazendo, aqui está como eu estou lançando o Explorer
Process explorer = new Process();
explorer.StartInfo.FileName =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "explorer.exe");
if (explorer.Start() == false)
{
MessageBox.Show("Explorer failed to start.");
}
else
{
//(Snip) some other code that is not relevant.
explorer.WaitForExit();
}
//(Snip) some cleanup code I run after the user logs off.
e funciona bem.
Agora estou fazendo isso dentro de uma sessão RDP usando esta política de grupo ( Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection
) não por meio do arquivo de registro que você estão usando, então talvez seja por isso que funciona para mim e não para você.
Outra coisa que eu posso fazer de diferente é também chamar explorer.WaitForExit();
no meu código e esperar que o explorador se feche antes de fechar meu aplicativo.
Tente usar a maneira como eu inicio o explorer e veja se funciona para você.