0 / 0 / 0
Регистрация: 21.06.2017
Сообщений: 7
1

Поиск запущенной программы по ее имени

21.06.2017, 11:33. Показов 2256. Ответов 5

Author24 — интернет-сервис помощи студентам
Возникла потребность в таких действиях: есть ресурсоемкая программа, которая должна работать, пока не запущен рад других тяжелых программ(игр).Все названия exe-шников будут в текстовом документе.И по таймеру он проверяет, запущено ли одно из этих приложений, и если нет, то запускает свое. и задача кроется в том, как программно получить из диспетчера задач именно имена этих программ, так как по методу
C#
1
ProcessName
выдается несколько другое имя. Иными словами, как получить название нужного ексешника, или вывести из exe файлов то, что выводится в
C#
1
ProcessName
.Пример: exe-"DOOM 4.exe", В диспетчере отображается "DOOM 4" и нужно получить именно эту строку из списка загруженных задач, чтоб сравнить ее.
Если кому поможет, вот мой код
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Diagnostics;
using System.IO;
 
namespace controller
{
    class Program
    {
        static void Main(string[] args)
        {
            Timer tmr = new Timer();
            tmr.Elapsed += new ElapsedEventHandler(CheckTheProcess);
            tmr.Interval = 1000;
            tmr.Start();
            Console.ReadKey();
        }
 
        public static void CheckTheProcess(object source, ElapsedEventArgs e)
        {
            Process[] processes = Process.GetProcesses();
            foreach (Process process in processes)
            {
                Console.WriteLine("ID: {0}  Name: {1}", process.Id, process.ProcessName);
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2017, 11:33
Ответы с готовыми решениями:

Узнать pid процесса по имени запущенной программы
Здравствуйте. Проблема такая: нужно из кода узнать PID запущенного процесса, при этом таких...

Поиск программы как по имени окна, так и по процессу
Мне надо сделать поиск программ и если они были запущенны то что то происходило Поиск нужен как...

Показ запущенной программы
И снова вопросик) Как все знают Диспетчере W7 есть такая кнопка Переключится, он показывает...

Вылетает из запущенной программы
Нужна помощь, при сборке, все работает, но потом после ввода второго-третьего числа, окно...

5
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 161
21.06.2017, 17:09 2
Если я правильно понял формулировку, то Вам необходимо использовать:
C#
1
2
3
var fileName = process.MainModule.FileName;
var fileInfo = new FileInfo(fileName);
var name = fileInfo.Name // то что нужно
PS приложение должно быть запущено с правами администратора.
0
0 / 0 / 0
Регистрация: 21.06.2017
Сообщений: 7
21.06.2017, 17:38  [ТС] 3
Цитата Сообщение от shtuceron Посмотреть сообщение
Если я правильно понял формулировку, то Вам необходимо использовать:
C#
1
2
3
var fileName = process.MainModule.FileName;
var fileInfo = new FileInfo(fileName);
var name = fileInfo.Name // то что нужно
PS приложение должно быть запущено с правами администратора.
после первой строчки вашего кода выходит исключение System.InvalidOperationException: "Нет процессов, связанных с этим объектом." Видимо нужно указать конкретную программу. Вот только как
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 161
21.06.2017, 17:54 4
А какой "ProcessName" при исключении?
0
0 / 0 / 0
Регистрация: 21.06.2017
Сообщений: 7
21.06.2017, 19:02  [ТС] 5
Переформулирую. Мне нужно узнать путь программы из ее процесса. пробовал
C#
1
currproc.MainModule.FileName.ToString()
но призапуске в режиме x32 было типо 32 процесс не может доставать инфу из 64 процесса, а в запуске 64 режима просто отказывало в доступе даже при запуске от админа. что делать.
0
3457 / 2469 / 695
Регистрация: 02.08.2011
Сообщений: 6,690
21.06.2017, 19:31 6
Соберите приложение под x64 и затем из проводника запустите от имени Администратора.

Добавлено через 17 минут
Вот альтернатива:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static string GetMainModuleFilepath(int processId)
        {
            string wmiQueryString = "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId;
            using (var searcher = new ManagementObjectSearcher(wmiQueryString))
            {
                using (var results = searcher.Get())
                {
                    ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault();
                    if (mo != null)
                    {
                        return (string)mo["ExecutablePath"];
                    }
                }
            }
            return null;
        }
Source.
Насчет отказа в доступе, видимо, из-за того что некоторые процессы выполняются от другого пользователя, и у текущего нету необходимых прав на него.
0
21.06.2017, 19:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2017, 19:31
Помогаю со студенческими работами здесь

Определить путь запущенной программы
Добрый вечер. Подскажите пожалуйста, как определить откуда были запущены программы. Раньше данный...

Посчитать CRC32 запущенной программы
Как посчитать контрольную сумму того же exe файла который в данный момент выполняется.

Переименование файла запущенной программы
Подскажите вот у меня есть программа запускаемая через файл с названием timers.exe Я хочу скачать...

Как следить за активностью запущенной программы
Доброго времени суток! Необходимо запустить процесс, примером (&quot;notepad&quot;) а затем логировать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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