다음은 해킹이지만, 내가 필요로하는 것에 대해서는 괜찮습니다.
일부 EULA 텍스트를 표시하고 Agree and Disagree 버튼이있는 C # 프로그램을 만들었습니다.
나는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
그 프로그램을 시작합니다.
컴퓨터가 부팅되면 일반 로그인 프롬프트가 표시됩니다.
로그인하면 사용자 정의 EULA 프로그램이 실행됩니다.
탐색기 셸, 시작 메뉴, 배경 없음 등은 없습니다 (내가 원하는대로).
동의하지 않는 버튼은 PC를 종료하고 정상적으로 작동합니다.
Agree 버튼이 일반 윈도우 탐색기 셸 (시작 메뉴, 배경 등)을로드하길 원합니다.
다음 C # 명령을 사용했습니다. Process.Start("explorer.exe");
그러나 이것은 쉘이 아닌 탐색기 창을 시작합니다. 나는 껍질을 발사하길 원해.
내가 뭘 놓치고 있니?
답변
Windows 10에서 Explorer Desktop을 다시 시작하려면 Shell 레지스트리 키를 “explorer.exe”로 설정하고 “sihost.exe”프로세스를 종료하거나 새 “sihost.exe”프로세스를 다시 시작해야합니다.
답변
나는 똑같은 일을 당신이하고있는 것처럼 여기 있습니다, 어떻게 탐색기를 시작할까요?
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.
그리고 그것은 잘 작동합니다.
이제 저는 RDP 세션에서 이것을 사용하고 있습니다. 이 그룹 정책 ( Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection
) 당신이 사용하고있는 레지스트리 파일을 통해서가 아니라 아마 그것이 내가 당신을 위해서가 아니라 당신을 위해 일하는 이유 일 것입니다.
내가 다른 일을 할 수도있는 또 하나의 일은 내가 또한 부름이다. explorer.WaitForExit();
내 코드에서 탐색기가 닫힐 때까지 기다렸다가 내 앱을 닫습니다.
탐색기를 시작하는 방식으로 시도해보고 탐색기가 작동하는지 확인하십시오.
답변
익스플로러는 셸 (shell)으로 실행하기 위해 충족해야 할 몇 가지 조건을보아야합니다.
- 탐색기를 실행하면 안됩니다 (예 : 제어판 포함).
- 익스플로러는 그것이 실제 셸인 것을 알아야합니다 – 따라서 explorer.exe를 시작하기 전에 그 값을 대체해야합니다 (몇 초 후에 다시 변경할 수 있습니다)
- 때로는 (최신 Windows 버전에서) explorer.exe를 시작하는 프로세스에 따라 다름 – explorer.exe에 “알려진”경우 -이 부분에 대한 자세한 내용은 없습니다. 그것을 변경, 불행히도)
귀하의 질문을 판단 할 때 최소한 파트 2는 누락되었습니다.
답변
레지스트리를 수정하고, explorer.exe를 쉘에 넣고, 새로운 explorer.exe 프로세스를 시작합니다 (explorer.exe를 실행하지 않습니다). 쉘을 쉘에 반환합니다 (필요하면 빈 값).