Проблема с Уничтожением Windows Explorer?

Я должен уничтожить процесс Windows Explorer (explorer.exe) для этого

позволяет говорят, что я использую собственный метод NT TerminateProcess

Это работает, но проблема состоит в том, что проводник запускается снова, могут быть окна, делает это, так или иначе. Когда я уничтожаю explorer.exe с диспетчером задач окон, он не возвращается, его уничтоженное пребывание.

Я хочу сделать независимо от того, что taskmanager делает через мое приложение.

Править:
Благодаря @sblom я решил его, быстрая тонкая настройка в реестре добилась цели. Хотя это - умный взлом, по-видимому, taskmnager имеет более чистый способ сделать это, однако, я решил пойти с путем @sblom на данный момент.

5
задан Vivek Bernard 3 April 2010 в 05:17
поделиться

3 ответа

"Настоящее" решение. (Полная программа. Протестировано для работы в Windows 7.)

using System;
using System.Runtime.InteropServices;

namespace ExplorerZap
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);

        static void Main(string[] args)
        {
            int hwnd;
            hwnd = FindWindow("Progman", null);
            PostMessage(hwnd, /*WM_QUIT*/ 0x12, 0, 0);
            return;
        }
    }
}
8
ответ дан 18 December 2019 в 05:49
поделиться

Что вам, вероятно, нужно сделать, так это вместо использования TerminateProcess отправить сообщение WM_QUIT в окна проводника и основной поток. Это немного сложно, но я нашел эту страницу, на которой есть пример кода, который может вам помочь:

http://www.replicator.org/node/100

Windows автоматически перезапустит explorer.exe после завершения процесса TerminateProcess так что он перезапускается в случае аварийного завершения.

2
ответ дан 18 December 2019 в 05:49
поделиться

Из Technet :

Вы можете установить раздел реестра HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon \ AutoRestartShell на 0, и он больше не будет автоматически перезапускаться.

14
ответ дан 18 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: