2016-06-01 5 views
2

私は、Windowsのデスクトップではなくシェルとして起動するアプリケーションを持っています。だから、起動後にデスクトップが全く見えません。場合によってはトラブルシューティング中にデスクトップにアクセスする必要があります。 Windows 7ではProcess.Start( "explorer")を実行しただけで、デスクトップが表示されます。しかし、Windows 10では、これはデスクトップではなくエクスプローラウィンドウを開くだけです。ただし、タスクマネージャを開き、ファイル/ Run New Taskを選択して「エクスプローラ」と入力すると、デスクトップが開きます。それで可能です。しかし、どのようにタスクマネージャがC#アプリケーションでやっていることを模倣できますか?私はWindows 7でできるように、Windows 10のC#コードでデスクトップをロード/表示できる必要があります。デスクトップ以外のシェルで起動した後、C#コードからデスクトップをロード/表示する方法は?

注:タスクマネージャを使用してデスクトップを表示することはできませんこれらは、キーボードのない単目的のPC(必要とされる)であるからです。次のように

私のコードは次のとおりです。私の観察結果を1として

Process Proc = new Process(); 
Proc.StartInfo.FileName = "explorer"; 
Proc.Start(); 
+0

私はそれがあなたのアプリケーションをシェルとして設定する方法に依存すると思います。https://technet.microsoft.com/en-us/itpro/windows/manage/set-up-a-kiosk-for-windows-10-デスクトップ版の場合は、割り当てられたアクセス権を使用していますか? – Jodrell

+0

私のアプリは古典的なWindowsアプリですので、私は割り当てられたアクセスを使用していません。私は "HKEY_Current_User \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ Shell"のレジストリ値を設定しています。 –

答えて

1

explorer.exeを起動し、レジストリキーHKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shellが(SP1まで少なくともXPとwin7の上)explorer.exeに設定されている場合にのみ、あなたのデスクトップを提供します。新しいプロセスを作成する前に、レジストリキーの値をexlorerに設定してから、アプリケーションに戻すことができます。 それでも解決しない場合は、explorer.exeの代わりにuserinit.exeを起動してみてください。 レジストリへの書き込みが読者に見えるまで少し時間がかかることがあることに注意してください.125秒間Thread.Sleepを挿入すると注意が必要です。

+0

私はできるだけ早くあなたの提案を試してみましょう。私はまだタスクマネージャが何をしているかを模倣する方法を決定したいと思っています。 –

+0

この回答はうまくいった!しかし、explorer.exeにシェルを設定する代わりに、シェル値を完全に削除しました。私はそれがとにかくWindowsのデフォルトだと信じています。次に、デスクトップをロードしたuserinit.exeを実行してから、自分のアプリケーションのシェル値を戻しました。 –