Но ни один из них не умеет завершать оболочку системы, с ошибками работают в WIN7 и т.д
Решил написать свой плагин, за основу взял вышеупомянутый плагин...
В общем долго "мучил" свой проект. И вот что получилось:
---
Плагин предназначен для ANSI версии NSIS, кроссплатформенный (х86/x64), только для систем Windows NT начиная от Win2000 и выше.
Никаких дополнительных приложений, библиотек не требуется. Плагин полностью идентичен по функционалу стандартного диспетчера задач. (использованы не документированные функции Win API)
1. Поиск запущенного процесса
Код:
Код: Выделить всё
nsRestart::FindProcess "процесс.exe"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = 1 -> процесс не найден, не запущен
$var = 0 -> процесс запущен2. Запись в файл *.ini список процессов с идентификаторами
Код:
Код: Выделить всё
nsRestart::ListProcess "Путь\файл.ini"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = error -> ошибка
$var =0 -> список успешно создан3. Получение полного пути запущенного процесса
Код:
Код: Выделить всё
nsRestart::PathProcess "процесс.exe"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = 1 -> процесс не найден, не запущен
$var -> путь к запущенному процессу4. Получение полного пути и командной строки запущенного процесса
Если запущеный процесс не имеет аргументов командной строки, то получаем путь к процессу.
Работает эта функция только с 32-битными процессами.
Достойного рещения для 64-битных процессов пока не нашел.
Код:
Код: Выделить всё
nsRestart::CmdPathProcess "процесс.exe"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = 1 -> процесс не найден, не запущен
$var -> путь к запущенному процессу + аргументы процесса5. Перезапуск с аргументами командной строки запущенного процесса.
Перезапуск делается с задержкой в одну секунду.
Естественно кроме, специфических процессов (служб и т.д).
64-битные процессы будут перезапущены без аргументов командной строки.
Я категорически не рекомендую делать перезапуск системных процессов !!!
Во избежания потерь данных и получения "синих" экранов смерти !!!!
Код:
Код: Выделить всё
nsRestart::RestartProcess "процесс.exe"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = 0 -> процесс успешно перезапущен
$var = 1 -> процесс не запущен, не найден
$var = 2 -> процесс невозможно завершить
$var = 3 -> процесс завершен, но невозможно запустить6. Завершение процесса
Я категорически не рекомендую "прибивать" системные процессы !!!
Во избежания потерь данных и получения "синих" экранов смерти !!!!
Код:
Код: Выделить всё
nsRestart::KillProcess "процесс.exe"
Pop $varГде $var[/i] принимает следующие значения:
Код:
Код: Выделить всё
$var = 0 -> процесс успешно завершен
$var = 1 -> процесс не запущен, не найден