6

Следующее является взломом, но для того, что мне нужно для его штрафа.

Я создал программу на C #, которая показывает текст EULA и имеет кнопку «Согласен и не согласен».

Я установил HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell для запуска этой программы.

Когда компьютер загружается, отображается обычная подсказка для входа.

После входа в систему запускается пользовательская программа EULA.

Здесь нет оболочки обозревателя, меню «Пуск», фона и т.д. (Что я и хочу).

Кнопка не согласен выключает компьютер и работает нормально.

Я хочу, чтобы кнопка «Согласен» загружала обычную оболочку Windows Explorer (меню «Пуск», фон и т.д.).

Я использовал следующую команду C #: Process.Start("explorer.exe");

Однако это запускает окно проводника, а не оболочку. Я хочу, чтобы оболочка запустилась.

Что мне не хватает?

4 ответа4

3

В Windows10 для перезапуска рабочего стола обозревателя необходимо установить в разделе реестра Shell «explorer.exe» и завершить процесс «sihost.exe» или перезапустить новый процесс «sihost.exe».

2

Я делаю то же самое, что и вы, вот как я запускаю 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.

и работает нормально.

Теперь я делаю это в сеансе RDP, используя эту групповую политику (Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection), а не через используемый вами файл реестра. так что, возможно, именно поэтому это работает для меня, а не для вас.

Еще одна вещь, которую я могу сделать по-другому, я также называю explorer.WaitForExit(); в моем коде и подождите, пока проводник не закроется, прежде чем закрывать мое приложение.

Попробуйте использовать способ запуска Explorer и посмотрите, работает ли он для вас.

1

Проводник должен увидеть некоторые выполненные условия для запуска в виде оболочки:

  1. Проводник не должен работать (например, с Панелью управления)
  2. Исследователь должен видеть, что это фактическая оболочка - следовательно, вам нужно заменить это значение перед запуском explorer.exe (может изменить его обратно через несколько секунд)
  3. Иногда кажется (в более новых версиях Windows) это зависит от процесса, который запускает explorer.exe - если он "известен" explorer.exe - хотя у меня нет больше деталей для этой части (и вы не могли поменяй, к сожалению)

Судя по вашему вопросу, вы как минимум пропускаете часть 2.

-1

Измените реестр, поместите explorer.exe в оболочку, запустите новый процесс explorer.exe (у вас не запущен процесс explorer.exe) и верните оболочку в свою оболочку (пустое значение, если необходимо).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .