Как проверить запущен ли процесс (программа)

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Запускаю батником определенную программу, например AIMP. Как мне через определенное время узнать, запущен ли процесс AIMP?

Этот код возвращает ID батника, но не Аимпа:
Код:
var path = project.Variables["path_bat_files"].Value; // путь к батнику
System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = path;
var process = System.Diagnostics.Process.Start(p);
// возвращаем Id запущенного процесса
return process.Id;
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
C#:
string processName = "AIMP"; // имя процесса
return System.Diagnostics.Process.GetProcessesByName(processName).Any(); // вернёт True или False
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Dimionix Спасибо за подсказку)
А что если AIMP-ов уже запущенно несколько копий? по имени процесса не узнать какой именно запустила Зенка.
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Se0mashines, зря удалил сообщение. Как-то так:

Запуск программы
C#:
string fileName = @"C:\Program Files\Notepad++\notepad++.exe"; // путь к файлу или имя exe'шника (напр, cmd.exe)
string arguments = @""; // параметры запуска
bool windowStyle = true; // true - не показывать окно процесса, false - показывать окно процесса
bool getProcessId = true; // true - получить ID процесса, false - не получать ID процесса
bool waitForExit = false; // true - ждать завершения работы, false - не ждать завершения работы
int timeOut = 10000; // таймаут выполнения, в миллисек

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = fileName;
process.StartInfo.Arguments = arguments;
if (windowStyle)
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
else
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
process.Start();
if (getProcessId)
    project.Variables["processId"].Value = process.Id.ToString(); // получаем ID процесса (создать переменную проекта processId)
if (waitForExit)
    process.WaitForExit(timeOut);
Проверяем запущен ли процесс (по ID процесса)
C#:
int processId = int.Parse(project.Variables["processId"].Value);
System.Diagnostics.Process.GetProcessById(processId).ProcessName.Any(); // выход по зеленой - процесс запущен, выход по красной - процесс НЕ запущен
Завершение процесса (по ID процесса)
C#:
int processId = int.Parse(project.Variables["processId"].Value);
System.Diagnostics.Process.GetProcessById(processId).Kill();
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Dimionix, еще раз спасибо. Редакнул прошлое сообщение.
Нашел другой костыль, вроде работает решил вернуться описать:

Первый кубик:
Код:
var path = project.Variables["path_bat_files"].Value; // путь к запускаемой проге
System.Diagnostics.ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo();
p.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.FileName = path;
var process = System.Diagnostics.Process.Start(p);
// возвращаем Id запущенного процесса
return process.Id;
Второй кубик:
Код:
string processName = project.Variables["id_process"].Value; // имя процесса
// return System.Diagnostics.Process.GetProcessesByName(processName).Any(); // вернёт True или False
return System.Diagnostics.Process.GetProcessById(Convert.ToInt32(project.Variables["id_process"].Value));
Если зеленая ветка, то процесс запущен, красная, процесса нет.
 

Вложения

  • Спасибо
Реакции: udder и phoenixs

TazMan

Client
Регистрация
05.01.2017
Сообщения
236
Благодарностей
37
Баллы
28
Добрый день ! интересные примеры ..а как сделать всё тоже самое только на удалённом компе ?
 

Fantomass

Client
Регистрация
13.04.2016
Сообщения
86
Благодарностей
36
Баллы
18
Проверяем запущен ли процесс (по ID процесса)
Подскажите пожалуйста, как сделать так, чтобы после проверки по ID запущен процесс или нет, кубик не завершал работу а продолжался согласно выбранному сценарию?
C#:
if ()
{
    //процесс запущен
}
else
{
    //процесс не запущен
}
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
@Dimionix привет, поделись решением, пожалуйста, как проверить, запущена ли служба windows? Например 3proxy
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
@Dimionix привет, поделись решением, пожалуйста, как проверить, запущена ли служба windows? Например 3proxy
Привет. Я, к сожалению, не такой гуру как @Dimionix, но я постарался поискать информацию.)

Подготовка:
1. Добавить в GAC
GAC.png

2. Указать using
Using.png

Код сниппета:
Получить статус службы:
try {
    var svc = new System.ServiceProcess.ServiceController("ServiceName"); // Вместо ServiceName имя службы
    var s = svc.Status.ToString();
    project.SendInfoToLog(s, true); // "s" можно записать в переменную и делать дальнейшую логику
}
catch (Exception)
{
    project.SendErrorToLog("Служба не установлена", true);
    //throw; // Раскомментировать, чтобы выходить по красной ветке.
}
Прикрепил проект ниже ↓
 

Вложения

  • Спасибо
Реакции: SlipDez и udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Привет. Я, к сожалению, не такой гуру как @Dimionix, но я постарался поискать информацию.)

Подготовка:
1. Добавить в GAC
Посмотреть вложение 90036

2. Указать using
Посмотреть вложение 90038

Код сниппета:
Получить статус службы:
try {
    var svc = new System.ServiceProcess.ServiceController("ServiceName"); // Вместо ServiceName имя службы
    var s = svc.Status.ToString();
    project.SendInfoToLog(s, true); // "s" можно записать в переменную и делать дальнейшую логику
}
catch (Exception)
{
    project.SendErrorToLog("Служба не установлена", true);
    //throw; // Раскомментировать, чтобы выходить по красной ветке.
}
Прикрепил проект ниже ↓
Отличное решение, спасибо что подробно все описал, а как в переменную заносить результат?
90040
 
  • Спасибо
Реакции: djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Отличное решение, спасибо что подробно все описал, а как в переменную заносить результат?
Посмотреть вложение 90040
Легко)
Проверка статуса службы в переменную:
try {
    var svc = new System.ServiceProcess.ServiceController("XblGameSave"); // Вместо ServiceName имя службы
    var s = svc.Status.ToString();
    project.Variables["statusService"].Value = s; // результат в переменную statusService
    project.SendInfoToLog(s, true);
catch (Exception)
{
    project.Variables["statusService"].Value = "Not installed";
    project.SendErrorToLog("Служба не установлена", true);
    //throw; // Раскомментировать, чтобы выходить по красной ветке.
}

Так если нужно брать название службы из переменной. Прикрепил проект ниже ↓.
C#:
string nameService = project.Variables["nameService"].Value; // Переменная nameService из проекта

try {
    var svc = new System.ServiceProcess.ServiceController(nameService); // Вместо ServiceName имя службы
    var s = svc.Status.ToString();
    project.Variables["statusService"].Value = s; // результат в переменную statusService
    project.SendInfoToLog(s, true);
}
catch (Exception)
{
    project.Variables["statusService"].Value = "Not installed";
    project.SendErrorToLog("Служба не установлена", true);
    //throw; // Раскомментировать, чтобы выходить по красной ветке.
}
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
@djaga скажи, пожалуйста, как можно запустить службы из Zennoposter? Я хотел через cmd, net start 3proxy или sc start 3proxy, но нужно CMD открывать с правами администратора
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
@djaga скажи, пожалуйста, как можно запустить службы из Zennoposter? Я хотел через cmd, net start 3proxy или sc start 3proxy, но нужно CMD открывать с правами администратора
Окей)
Запустить службу если она остановлена:
string nameService = project.Variables["nameService"].Value; // Переменная nameService из проекта

try {
    var svc = new System.ServiceProcess.ServiceController(nameService); // Вместо ServiceName имя службы
    var status = svc.Status.ToString();
    project.Variables["statusService"].Value = status;
    project.SendInfoToLog(status, true); // "status" можно записать в переменную и делать дальнейшую логику
    
    if(status == "Stopped")
    {
        svc.Start(); // Запустить службу, если она Stopped
        project.SendInfoToLog($"Запуск службы \"{nameService}\" состоялся успешно", true);
    }

    }
catch (Exception)
{
    project.Variables["statusService"].Value = "Not installed";
    project.SendErrorToLog("Служба не установлена", true);
    //throw; // Раскомментировать, чтобы выходить по красной ветке.
}
Если перезапустить —> svc.Refresh();
Если остановить —> svc.Stop();

Ниже проект ↓
 

Вложения

Последнее редактирование:

Gfoblin

Client
Регистрация
30.05.2013
Сообщения
4 595
Благодарностей
1 014
Баллы
113
Se0mashines, зря удалил сообщение. Как-то так:
Бро выручай всё с .exe работает, а вот с .bat если он дальше процессы стартует уже их не прибить так :(
Вот 2 стартанул:
121586

Один прибил остался кусок висеть, рил прибить с дочерними процессами? )
121587


Спасибо!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)