web-dev-qa-db-ja.com

別のシェルで起動した後、Windowsエクスプローラーシェルを起動するにはどうすればよいですか?

以下はハックですが、私が必要としているのはその罰金です。

EULAテキストを表示し、[同意する]ボタンと[同意しない]ボタンがあるC#プログラムを作成しました。

そのプログラムを起動するように_HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell_を設定しました。

コンピュータが起動すると、通常のログインプロンプトが表示されます。

ログイン後、カスタムEULAプログラムが起動します。

エクスプローラーシェル、スタートメニュー、背景などはありません(これが私が欲しいものです)。

同意しないボタンはPCをシャットダウンし、正常に動作します。

[同意する]ボタンで通常のWindowsエクスプローラシェル(スタートメニュー、背景など)をロードしたい。

次のC#コマンドを使用しました:Process.Start("Explorer.exe");

ただし、これにより、シェルではなくエクスプローラウィンドウが起動します。シェルを起動させたい。

何が足りないのですか?

7
Keltari

Windows10では、エクスプローラーデスクトップを再起動するには、シェルレジストリキーを「Explorer.exe」に設定してプロセス「sihost.exe」を強制終了するか、新しい「sihost.exe」プロセスを再起動する必要があります。

5
Jieff

私はあなたがしているのとまったく同じことをします、これが私がエクスプローラーを起動する方法です

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

そしてそれはうまくいきます。

現在、使用しているレジストリファイルを介さずに このグループポリシー (_Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection_)を使用してRDPセッション内でこれを行っているので、おそらくそれが私にとっては機能し、あなたにとっては機能しない理由です。

私が別のことをしている可能性があるもう1つのことは、コードでExplorer.WaitForExit();を呼び出し、Explorerが閉じるのを待ってからアプリを閉じることです。

Explorerの起動方法を使用して、それが機能するかどうかを確認してください。

2

エクスプローラーは、シェルとして起動するためにいくつかの満たされた条件を確認する必要があります。

  1. Explorerを実行しないでください(たとえば、コントロールパネルを含む)
  2. Explorerは、それが実際のシェルであることを確認する必要があります。したがって、Explorer.exeを起動する前にその値を置き換える必要があります(数秒後に元に戻すことができます)。
  3. (新しいWindowsバージョンでは)Explorer.exeを起動するプロセスに依存しているように見えることがあります(Explorer.exeに「認識されている」場合)。ただし、この部分の詳細はわかりません(できませんでした)。残念ながら、変更してください)

あなたの質問から判断すると、少なくともパート2が欠けています。

2
JeffRSon

MicrosoftのShellLauncherをインストールして使用することにより、カスタムシェルをインストールする方法の指示に従ったときに経験したことは、最初にカスタムシェルが表示されます(タスクバーなどなし)が、Windowsエクスプローラーを起動した瞬間に表示されます。タスクバーを表示します。参照: https://docs.Microsoft.com/en-us/windows-hardware/customize/enterprise/Shell-launcher

0
clsturgeon

@Jieffの実用的な回答に基づいて、カスタムシェルをエスケープするバッチスクリプトを作成しました。

@echo OFF

echo|set /p="Escape (1/6) - Changing Shell to Explorer.exe .......................... "
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "Explorer.exe" /f > NUL 2>NUL
IF %ERRORLEVEL% == 0 ( ECHO OK! ) ELSE ( ECHO FAIL! )

echo|set /p="Escape (2/6) - Killing sihost.exe ...................................... " 
taskkill /F /IM sihost.exe > NUL 2>NUL
echo OK!

echo|set /p="Escape (3/6) - Waiting some time for sihost.exe to shutdown ............ " 
timeout /T 5 /nobreak > NUL 2>NUL
echo OK!

echo|set /p="Escape (4/6) - Restarting sihost.exe ................................... " 
start sihost.exe > NUL 2>NUL
echo OK!

echo|set /p="Escape (5/6) - Waiting some time for sihost.exe to start ............... " 
timeout /T 15 /nobreak > NUL 2>NUL
echo OK!

:: 6/6 could be a REG change back to the previous custom Shell for the next system (re)start. The Explorer Shell will still be available.
0
Daniel