Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
.NET 4.x

Как перезапустить процесс в taskmgr?

08.09.2018, 18:50. Показов 2536. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появилась необходимость при запуске программы проверить работает ли в винде процесс, и если работает, то закрыть его и заново запустить, а если не работает, то просто запустить его.
Пока смутно представляю как это сделать, если просто прописать запуск процесса то можно словить Exception что процесс уже работает, а если прописать process.stop(); то можно поймать процесс не найден, смутно себе представляю обернуть всё в try/catch и задать условие через if. Может кто помочь советом как реализовать поставленную задачу?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2018, 18:50
Ответы с готовыми решениями:

Как можно перезапустить любой процесс при его закрытии
Как можно перезапустить процесс, если его закрыли, завершили? Например, на vbs я могу это сделать так Set WshShell =...

Как програмно остановить(перезапустить) процесс в диспетчере задач
Меня, в частности интересует процесс wdm.exe (диспетчер рабочего стола) в windows Vista. Помогите советом. Буду особо признателен за...

Процесс taskmgr.exe грузит процессор на 100 %
этот вот файл taskmgr.exe или программа не знаю что это, занимает процессор на 100 %, он находится в папке system 32, нажимая c ntr alt del...

8
Заблокирован
08.09.2018, 20:57
Проверить работает ли процесс(не заглючил ли часом...) методами C# - думаю, не реально.

Цитата Сообщение от TedKachinsky Посмотреть сообщение
Появилась необходимость при запуске программы проверить работает ли в винде процесс, и если работает, то закрыть его и заново запустить, а если не работает, то просто запустить его.
Та что там?
http://pinvoke.net/
, а именнно
GetWindow и GetWindowByName -если что гуглите в этом направлении.
Отловить его и прибить, потом Process.Start();

Мютесы нельзя этому процессу делать? (чтоб знать запущен ли он?)
0
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
08.09.2018, 22:09  [ТС]
Всё на много проще(
Есть кассовый аппарат который подключен к компу, стартует он с exe'шника SparkSrv.exe а этот exe'шник запускает еще один exe'шник WSOFD.exe, вот как раз таки второй exe'шник не успевает нормально запуститься и приходится его убивать и заново стартовать, в противном случае он висит в процессах и не отправляет ОФД отчетность в налоговую, и память накопителя в кассовом аппарате переполняется. Программа написана не мной и исходников у меня к ней нет, пишу заплатку для неё, чтобы в дальнейшем было меньше заявок в траблтикет по поводу висит кассовый аппарат там, и там, и там.

Вот пока что накидал возможный вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
namespace TestTasks
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public bool FindAndKillProcess(string name)
        {
            try
            {
                foreach (Process clsProcess in Process.GetProcesses())
                {
                    if (clsProcess.ProcessName.StartsWith(name))
                    {
                        clsProcess.Kill();
 
                        clsProcess.WaitForExit();
                       
                        if (clsProcess.HasExited)
                            return true;
                        else
                            return false;
                    }
                }
                return false;
            }
            catch (Exception)
            {
                return false;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Process Test = new Process();
            Test.StartInfo.FileName = @"D:\calc.exe";
            Test.Start();
        }
    }
}
И пока это не работает, тестирую на калькуляторе, в состоянии не запущен и наоборот.

Добавлено через 9 минут
Цитата Сообщение от Моя говорить Посмотреть сообщение
Мютесы нельзя этому процессу делать? (чтоб знать запущен ли он?)
Можно, даже нужно.
0
Заблокирован
08.09.2018, 22:41
Цитата Сообщение от TedKachinsky Посмотреть сообщение
Мютесы нельзя этому процессу делать? (чтоб знать запущен ли он?)
Можно, даже нужно.
Вы неправильно поняли, мютекс(объект ядра Виндовс создает сама программа, как правило это применяется для недопущения повторных запусков одной и той же программы)

Цитата Сообщение от TedKachinsky Посмотреть сообщение
стартует он с exe'шника SparkSrv.exe а этот exe'шник запускает еще один exe'шник WSOFD.exe, вот как раз таки второй exe'шник не успевает нормально запуститься и приходится его убивать и заново стартовать,
Попробуйте сделать через cmd|bat - и не нужно на Шарпе будет кодить. В батнике пропишите старт первой проги, потом Delay, потом убийство второй проги и перезапуск второй проги.(Если нужно, есть утилитка bat2exe в свободном распространении в инете - из батника сделать экзэшник).
0
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
08.09.2018, 22:47  [ТС]
Всё же лучше в Шарпе реализовать, защитившись от нетерпимых рук желающих закрыть окно консоли до его выполнения.
P.S: батник есть, толку ноль, операторы всё равно тыкают на него.
0
Заблокирован
08.09.2018, 23:10
Цитата Сообщение от TedKachinsky Посмотреть сообщение
P.S: батник есть, толку ноль, операторы всё равно тыкают на него.
Та да, оператор - самый тормознутый элемент компъютера - я это уже понял и давно.
(Вот недавно было, в прошлую пятницу(то есть вчера): звонит юзер коллеге, коллега спрашивает имя его компьютера(чтоб удаленно подключится) - тот называет свое имя-отчество(и так несколько раз), в итоге коллега пошел к нему чтоб по-месту сделать).
Вспоминается анекдот про стаю волков у которых у главаря во лбу дырка.

Цитата Сообщение от TedKachinsky Посмотреть сообщение
Всё же лучше в Шарпе реализовать, защитившись от нетерпимых рук желающих закрыть окно консоли до его выполнения.
Тогда только через WIN.API.
Как я уже говорил http://pinvoke.net/ в помощь.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
09.09.2018, 15:34
Лучший ответ Сообщение было отмечено TedKachinsky как решение

Решение

TedKachinsky, попробуй такую реализацию
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public bool KillProcess(string processName)
{
    var processes = Process.GetProcessesByName(processName);
    if (processes.Length > 0)
    {
        foreach (Process proc in processes)
        {
            try
            {
                for (int i = 0; i < 5; i++)
                {
                    proc.Kill();
                    proc.WaitForExit(TimeSpan.FromSeconds(2));
                    if (proc.HasExited) break;
                }
            }
            catch
            {
            }
        }
        
        processes = Process.GetProcessesByName(processName);
    }
    
    return processes.Length == 0;
}
 
private void Form1_Load(object sender, EventArgs e)
{
    if (KillProcess("WSOFD"))
    {
        Process.Start("WSOFD.exe");
    }
}
1
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 11
09.09.2018, 15:51  [ТС]
Спасибо, только пришлось параметр TimeSpan.FromSeconds(2) убрать, иначе ругается на тип данных, просит конвертировать в int32, в целом всё работает, если экзешник снова будет вешаться, то тогда конвертирую в int а после укажу нужный таймаут, хотя на msdn пишут, что при запуске WaitForExit система дожидается полного завершения процесса и только после стартует.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
09.09.2018, 15:55
TedKachinsky, убрать таймаут плохая идея. Я его специально поставил чтобы не было риска подвисания проверки если завершаемый процесс не завершиться. Замени TimeSpan.FromSeconds(2) на 2000.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2018, 15:55
Помогаю со студенческими работами здесь

Завершить процесс и перезапустить службу
Всем привет.Подскажите как написать правильно батник который сначала убивает процесс nusb3mon.exe ,потом останавливает службу nusb3 и потом...

Как перезапустить цикл for?
У меня есть код Python, где я прокручиваю каждую строку в файловом объекте с типичным синтаксисом for line in file_object: Этот цикл имеет...

Как перезапустить проект?
Как програмно перезапустить проект и чтобы перезапустилась она на нужную форму?

Как перезапустить программу?
Нужно чтобы по окончанию игры и выборе &quot;сыграть ещё раз&quot; игра перезапускалась снова в этом же окне или же в другом закрыв при этом 1е. ...

Как перезапустить скрипт?
Нужно, чтобы при выполнении некоторого условия текущий скрипт выполнялся бы сначала. И второй вопрос: как сделать, чтобы скрипт запускался...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru