Como iniciar o shell do Windows Explorer depois de iniciar com um diferente?

5

O seguinte é um hack, mas para o que eu preciso para o seu bem.

Eu criei um programa em C # que mostra alguns textos do EULA e possui um botão Concordar e Discordar.

Eu defino o HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell para iniciar esse programa.

Quando o computador é inicializado, o prompt de login normal é exibido.

Após o login, o programa EULA personalizado é iniciado.

Não há shell do explorer, nenhum menu inicial, nenhum plano de fundo, etc. (que é o que eu quero).

O botão "discordar" desliga o computador e funciona bem.

Eu quero o botão Agree para carregar o shell normal do Windows Explorer (menu Iniciar, plano de fundo, etc).

Eu usei o seguinte comando C #: Process.Start("explorer.exe");

No entanto, isso inicia uma janela do explorador, não o shell. Eu quero o shell para o lançamento.

O que estou perdendo?

    
por Keltari 12.09.2013 / 18:41

4 respostas

2

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ê.

    
por 12.09.2013 / 19:35
2

No Windows10, para reiniciar um Explorer Desktop, você deve definir a chave de registro do Shell como "explorer.exe" e eliminar o processo "sihost.exe" ou reiniciar um novo processo "sihost.exe".

    
por 19.12.2017 / 15:48
1

O Explorer precisa ver algumas condições preenchidas para ser lançado como shell:

  1. O Explorer não deve ser executado (o que inclui o Painel de Controle, por exemplo)
  2. O Explorer deve ver que é o shell real - por isso, é necessário substituir esse valor antes de iniciar o explorer.exe (pode alterá-lo novamente alguns segundos depois)
  3. Às vezes parece (em versões mais recentes do Windows) depende do processo que lança explorer.exe - se é "conhecido" para explorer.exe - eu não tenho mais detalhes para esta parte embora (e você não poderia mudá-lo, infelizmente)

A julgar pela sua pergunta, pelo menos você está perdendo a parte 2.

    
por 04.03.2014 / 12:05
-1

Modifique o registro, coloque o explorer.exe no shell, inicie o novo processo explorer.exe (você não tem nenhum processo explorer.exe em execução) e retorne o shell ao seu shell (valor vazio se necessário).

    
por 12.10.2017 / 22:30