Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 7
1

закрыть процесс

26.09.2017, 13:06. Показов 2984. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, имеется программа, которая всегда как активное окно, периодически программа "prog" закрывается (процесс остается) и вылетает окно с ошибкой. Необходим батник или vbs, который постоянно крутится и при появлении окна с ошибкой убивает процесс "prog" и заново запускает программу. Пробовал отлавливать ошибку по windowtitle, но ошибка это тот же процесс что и сама "prog".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2017, 13:06
Ответы с готовыми решениями:

Закрыть процесс с ожиданием подтверждения
Есть процесс «Program.exe», который нужно закрыть. Проблема в том, что при выполнении команды:...

Как сделать так что бы батник мониторил процесс и если процесс перезепустился то запуск или перезапуск другой программы
помогите , как сделать так что бы батник мониторил процесс и если процесс перезепустился то запуск...

После выполнения всех команд закрыть процесс по PID
Помогите пожалуйста, Есть скрипт Vbs 'Запускаю появляется процесс mshta.exe нужно закрыть окно...

Закрыть порты на серверном терминале (какие порты в данном случае можно закрыть?)
Имеется серверный терминал,человек сказал что требуется закрыть ВСЕ порты. Понятно что все нельзя...

14
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
26.09.2017, 13:19 2
если основной процесс "prog.exe" будет запускаться из bat и при появлении окна с ошибкой в bat будет отрабатывать %errorlevel%, тогда еще можно что-то придумать, иначе такое окно bat не отловит.
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 7
26.09.2017, 13:22  [ТС] 3
а может как то можно по размеру окна "prog.exe"? когда "prog.exe" работает она на весь экран,а когда ошибка то становится меньше.
0
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.09.2017, 14:55 4
oneegin, Здесь нужен сервис, который с определенной периодичностью будет искать окно с ошибкой, и отсылать окну команду закрытия.
Можно сделать через Powershell + Winapi и Планировщик, но точно не CMD
Потребуются:
FindWindowExA
SendMessage

Окно ошибки искать можно по имени класса , предварительно уточнив его, например, через WinSpy
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 7
26.09.2017, 15:01  [ТС] 5
не силен в этом) я больше по АСУТП) ткните на пример кода с поиском окна findwindow, думал уже об этом класс окна узнал через WinDowzer.
0
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
26.09.2017, 15:09 6
oneegin,
класс окна узнал через WinDowzer
Класс окна с ошибкой отличается от класса основного окна?

PowerShell
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
 #ДОБАВЛЯЕМ СВОЙ КЛАСС, В КОТОРЫЙ ИМПОРТИРУЕМ ФУНКЦИИ ИЗ БИБЛИОТЕКИ user32.dll
 Add-Type @"
                using System; 
                using System.Threading; 
                using System.Collections; 
                using System.Diagnostics; 
                using System.Runtime.InteropServices; 
                using System.Collections.Specialized;
                using System.ComponentModel;
                using System.Collections.Generic;
                
                public class Win32 
                    {private delegate bool EnumDesktopProc(string lpszDesktop, IntPtr lParam); 
                    private delegate bool EnumDesktopWindowsProc(IntPtr desktopHandle, IntPtr lParam); 
                    
                        
                        [DllImport("user32.dll")]
                        public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
                        public const uint WM_CLOSE=0x0010;
                        [DllImport("user32.dll", SetLastError = true)]
                        public static extern IntPtr FindWindowExA(IntPtr parentHandle, IntPtr childAfter, string className,  string  windowTitle);
                        [DllImport("user32.dll")] 
                        public static extern IntPtr GetProcessWindowStation(); 
                    }
 
                
"@
 
$hand=[Win32]::FindWindowExA(0,0,"V8NewLocalFrameBaseWnd","1С:Предприятие")
[win32]::SendMessage($hand,[win32]::WM_CLOSE,0,0)
Данный кусок кода закрывает окна класса V8NewLocalFrameBaseWnd c именем окна 1С:Предприятие
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
29.09.2017, 12:37 7
Цитата Сообщение от v_svitere Посмотреть сообщение
oneegin, Здесь нужен сервис, который с определенной периодичностью будет искать окно с ошибкой, и отсылать окну команду закрытия.
Можно сделать через Powershell + Winapi и Планировщик, но точно не CMD
Потребуются:
FindWindowExA
SendMessage
nircmd прекрасно с такой задачей справляется.
0
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
29.09.2017, 12:44 8
Dragokas, Согласен.
Я же не настаиваю, что мой вариант единственно верный)
0
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 7
29.09.2017, 12:51  [ТС] 9
а подскажите как через nircmd это сделать? или натолкните на пост. гуглом пользоваться умею, но время ограниченно...
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
29.09.2017, 13:03 10
Лучший ответ Сообщение было отмечено oneegin как решение

Решение

Что-нибудь вроде такого:

Windows Batch file
1
nircmd win close ititle "Ошибка"
сохранить в oem-866.

nircmd взять отсюда.

ну и загнать в цикл.

а если уж делать через службу или C#, PS, то красивее поставить хук на появление нового окна, чтобы не нагружать проц одним и тем же циклом.
0
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
29.09.2017, 13:13 11
Dragokas,
красивее поставить хук на появление нового окна, чтобы не нагружать проц одним и тем же циклом.
Элегантнее то, оно 100%, но и сложнее на порядок, нужны не дюжие знания, придется внедрятся в адресное пространство процесса. Во вторых придется курить документацию и MSDN, но я с вами согласен, что это выглядит лучше.
К своему стыду, у меня проект с подобным функционалом сделан через цикл
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
29.09.2017, 13:17 12
Цитата Сообщение от v_svitere Посмотреть сообщение
придется внедрятся в адресное пространство процесса
Не нужно. Достаточно SetWindowsHookEx + WH_CBTHOOK и ловить сабклассингом.
1
774 / 423 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
29.09.2017, 13:26 13
Dragokas,
Не нужно. Достаточно SetWindowsHookEx + WH_CBTHOOK и ловить сабклассингом.

Похоже настало время переписать мой костыль
Спасибо!

Добавлено через 6 минут
Dragokas, А нет ли у вас часом примера, например на Делфе или C++?
Можно без объяснений.
0
Dragokas
29.09.2017, 13:32
  #14

Не по теме:


На С++ редко пишу.
Вот что первое нашел: https://sim0n.wordpress.com/20... k-example/
Похоже, то что вам нужно.

1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 7
30.09.2017, 07:03  [ТС] 15
все получилось через nircmd, только пришлось переопределить заголовок самой программы..
0
30.09.2017, 07:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2017, 07:03
Помогаю со студенческими работами здесь

Закрыть процесс по ID
Нашел на этом форуме код, который закрывает процессы по имени. #include <stdio.h> #include...

Не могу закрыть процесс
Всем привет! Недавно зафейлил, торопился и выключил ноут через кнопку питания, так как он немного...

Закрыть excel процесс
Есть 2 класса. 1й класс partial class MainForm : Form { private void MainForm_Load(object...

Закрыть сторонний процесс
Добрый день, требуется сделать так, чтоб при определённых обстоятельствах ексель закрывал...

Закрыть процесс использования файла
У меня картинка загружается в picturebox, а рядом с ним находится кнопка "Обзор". Нажав на нее...

Как правильно закрыть процесс
Я пишу программу мониторинга Для этого использую драйвер и в драйвере подменяю CreateSection Как...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru