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

  • Автор темы Автор темы Se0mashines
  • Дата начала Дата начала

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;
 
C#:
Развернуть Свернуть Копировать
string processName = "AIMP"; // имя процесса
return System.Diagnostics.Process.GetProcessesByName(processName).Any(); // вернёт True или False
 
Dimionix Спасибо за подсказку)
А что если AIMP-ов уже запущенно несколько копий? по имени процесса не узнать какой именно запустила Зенка.
 
Последнее редактирование:
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();
 
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));

Если зеленая ветка, то процесс запущен, красная, процесса нет.
 

Вложения

  • 2017-11-26_085158.jpg
    2017-11-26_085158.jpg
    126,1 KB · Просмотры: 890
  • Оценить
Реакции: udder и phoenixs
Добрый день ! интересные примеры ..а как сделать всё тоже самое только на удалённом компе ?
 
Проверяем запущен ли процесс (по ID процесса)
Подскажите пожалуйста, как сделать так, чтобы после проверки по ID запущен процесс или нет, кубик не завершал работу а продолжался согласно выбранному сценарию?
C#:
Развернуть Свернуть Копировать
if ()
{
    //процесс запущен
}
else
{
    //процесс не запущен
}
 
@Dimionix привет, поделись решением, пожалуйста, как проверить, запущена ли служба windows? Например 3proxy
 
@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
Привет. Я, к сожалению, не такой гуру как @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
Отличное решение, спасибо что подробно все описал, а как в переменную заносить результат?
Посмотреть вложение 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
@djaga скажи, пожалуйста, как можно запустить службы из Zennoposter? Я хотел через cmd, net start 3proxy или sc start 3proxy, но нужно CMD открывать с правами администратора
 
@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();

Ниже проект ↓
 

Вложения

Последнее редактирование:
Se0mashines, зря удалил сообщение. Как-то так:
Бро выручай всё с .exe работает, а вот с .bat если он дальше процессы стартует уже их не прибить так :(
Вот 2 стартанул:
121586

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


Спасибо!
 

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