необходимо закрыть все запущенные приложения без использования выхода Windows из приложения C # - PullRequest
3 голосов
/ 19 апреля 2010

Мне нужно закрыть все открытые приложения в Windows, в то время как мое приложение закрывается, как мне это сделать, используя c #

Я использую функцию входа / выхода из системы в самом приложении вместо входа / выхода из Windows, так что мне нужно закрыть все приложения, когда выход из системы щелкнул в моем приложении, и после этого передать управление моему приложению

Ответы [ 3 ]

0 голосов
/ 19 апреля 2010

По какой-то причине вы хотите это сделать. Это немного более забавный способ сделать это!

using System.Diagnostics;

Parallel.ForEach(Process.GetProcesses(), process => process.Kill());

Не запускайте это с повышенным процессом; вероятно, приведет к краху вашей ОС.

0 голосов
/ 28 декабря 2010

Вы определенно НЕ хотите просто перебирать системные процессы и убивать их всех. Есть много вещей, которые не должны быть убиты. Если вы вышли из системы в Windows, а затем вошли в систему под другим пользователем, существует много процессов, которые продолжают работать на системном уровне и являются общими для всех пользователей.

В качестве хорошего примера, если я посмотрю в диспетчере задач Windows процессы, которыми владеет мой текущий пользователь (не системный), то у меня работает ATI Catalyst Control, приложение Synaptics для моей сенсорной панели, приложение Logitech для моей мыши, что-то для стека Bluetooth, что-то для аудиосистемы, что-то для управления беспроводным сетевым интерфейсом Dell ... Если я убью все это, я подозреваю, что мои периферийные устройства будут вести себя странно, даже если после меня войдет другой пользователь.


Не могли бы вы просто вызвать фактический материал LogOut Windows с помощью P / Invoke, как предложено здесь ? Таким образом, сама Windows может делать ... ну, все, что она делает , когда пользователь выходит из системы, вместо того, чтобы вам приходилось иметь дело с этим самостоятельно.

В худшем случае , я бы попытался собрать вещи, которые были запущены Windows во время запуска. Элементы Statup из StartMenu:

C: \ Users \ Имя_пользователя \ AppData \ Roaming \ Microsoft \ Windows \ Пуск \ Меню \ Программы \ Автозагрузка

и элементы реестра:

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run

Затем зациклите запущенные процессы и посмотрите, какие из них действительно принадлежат этому пользователю, и остановите только те из них.

0 голосов
/ 19 апреля 2010
using System.Diagnostics;

Process [] localAll = Process.GetProcesses();
foreach(Process p in localAll)
{
    p.Kill();
}

Но вам, вероятно, придется установить какой-то фильтр, чтобы избежать остановки определенных процессов, так как в противном случае машина может немного расстроиться.

...