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

Не могу найти путь к процессу

17.05.2019, 12:01. Показов 453. Ответов 5

Author24 — интернет-сервис помощи студентам
Господа программисты!! Помогите решить проблему.

Понадобилось написать мониторинг проверки на запуск нескольких процессов. Далее работать с путем к .exe файлу. В общем эту заду решил, покопавшись на просторах интернета. Насобирал по крупицам говнокод, подправил под свои нужды вроде все работает. Все да не все.
По всей видимости проблема возникла что не хватает прав на открытие процесса в OpenProcess. Пытался менять права как написано в https://docs.microsoft.com/ru-... ess-rights
Но ничего не изменяется.
Программа которую нужно контролировать по всей видимости имеет защиту. Перепробовал загонять все что есть диспетчере задач работает все кроме системных например winlogon.exe.. Как обойти защиту. Скажу сразу программа не системная, просто парни подстраховались. Если даже каперский разрешает посмотреть где он живет.
И второе как я понял на 64 бита работать не будет?

Как бы мне от этого гемороя избавиться. Может есть вариант переписать *определение пути .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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "pch.h"
#include <iostream>
#include <string>
#include <windows.h>
#include <cstdlib>
#include <codecvt>
#include <tlhelp32.h>
#include <psapi.h> 
#include <tchar.h>
 
//using input = std::istreambuf_iterator<char>;
using namespace std;
using std::string;
 
#ifdef _UNICODE
#define tcout wcout
#define tcerr wcerr
#else
#define tcout cout
#define tcerr cerr
#endif
 
int ProcID;
 
bool IsProcessPresent(wchar_t * szExe)
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnapshot, &pe);
 
    if (!_wcsicmp((wchar_t *)&pe.szExeFile, szExe))
    {
        return true;
    }
 
    while (Process32Next(hSnapshot, &pe))
    {
        if (!_wcsicmp((wchar_t *)&pe.szExeFile, szExe))
        {
            
            ProcID = pe.th32ProcessID;
            wcout << L"PID процесса: " << ProcID << endl;
            return true;
        }
    }
 
    return false;
}
 
int main(int argc, TCHAR * argv[])
{
    setlocale(LC_CTYPE, "rus");
 
    TCHAR szExe[] = L"calc.exe";      // Калькулятор
    TCHAR szExe1[] = L"Notepad++.exe";  // Notepad++
    TCHAR szExe2[] = L"notepad.exe";   // Блокнот
    while (1)
    {
        if (IsProcessPresent((wchar_t *)&szExe))
        {
            wcout << szExe << L" - Запущен" << endl;
            break;
        }
        else
        {
            wcout << szExe << L" - Не запущен" << endl;
        }
        
        if (IsProcessPresent((wchar_t *)&szExe1))
        {
            wcout << szExe1 << L" = Запущен" << endl;
            break;
        }
        else
        {
            wcout << szExe1 << L" - Не запущен" << endl;
        }
 
        if (IsProcessPresent((wchar_t *)&szExe2))
        {
            wcout << szExe2 << L" - Запущен" << endl << endl;
            break;
        }
        else
        {
            wcout << szExe2 << L" - Не запущен" << endl << endl;
        }
        Sleep(3000);
    }
 
    //  Определяем путь
 
    HANDLE processHandle = NULL;
    TCHAR filename[MAX_PATH];
 
    processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcID);
    if (processHandle != NULL) {
        if (GetModuleFileNameEx(processHandle, NULL, filename, MAX_PATH) == 0) {
            tcerr << L"Не удалось получить имя файла модуля." << endl;
        }
        else {
            tcout << L"Имя файла модуля: " << filename << endl;
            
        }
        CloseHandle(processHandle);
    }
    else {
        tcerr << L"Не удалось открыть процесс." << endl;
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2019, 12:01
Ответы с готовыми решениями:

Путь к процессу
Здравствуйте. Я знаю hwnd нужного окна Могу ли я узнать полный путь к процессу которому...

Путь к приложению по процессу
Всем привет) Как можно сделать определение по процессу местоположения игры(любой)

Системе не удается найти указанный путь. И путь к рабочему столу :С
Подскажите в чем может быть проблема - Открываю ранее деланный проект - и выводит сообщение, что не...

Не могу прописать путь до БД
У МЕНЯ В ДЕЛФИ ТАКАЯ СИТУАЦИЯ..НЕ МОГУ ПРОПИСАТЬ ПУТЬ ДО БАЗЫ В КОМПОНЕНТЕ IBDatabase при поиске...

5
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
17.05.2019, 13:55 2
Цитата Сообщение от DaemonX Посмотреть сообщение
Программа которую нужно контролировать по всей видимости имеет защиту. Перепробовал загонять все что есть диспетчере задач работает все кроме системных например winlogon.exe.. Как обойти защиту. Скажу сразу программа не системная, просто парни подстраховались
Попробуй запустить свою программу под администратором - Run As Adminstrator

Добавлено через 30 минут
OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION работает под администратором
1
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 19
17.05.2019, 14:51  [ТС] 3
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Попробуй запустить свою программу под администратором - Run As Adminstrator
Запускал из папки не под VS-17 - работает. Без админа нет.
Вы правы так работает но это как бы не выход, не все под админом сидят и права имеют.

Тогда вопрос а как же все выкручиваются разработчики. Я редко встречал программы которые требуют в обязаловку запуск под админом.
Может есть другие решения рабочие а то в инете как бы есть но VS-17 такая капризная на все ругается....
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
17.05.2019, 16:49 4
Цитата Сообщение от DaemonX Посмотреть сообщение
а то в инете как бы есть но VS-17 такая капризная на все ругается....
В смысле?
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 19
17.05.2019, 19:34  [ТС] 5
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сообщение от DaemonX
а то в инете как бы есть но VS-17 такая капризная на все ругается....
В смысле?
Да просто опыта пока маловато я пока из песочницы не вылез, вот и приходится искать примеры в инете. Перерабатывать, изучать их потому что все старые - половина функций не работают. Или криво написан код, вот так и мучаемся. Не утверждаю то все примеры корявые, нет конечно но пока что выберешь десяток перелопатишь. А это все время...
Но это не беда разобрав сотню примеров по любой теме нарабатывается опыт. Думаю все так начинали.
Так что вот такой смысл..
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
17.05.2019, 21:32 6
Цитата Сообщение от DaemonX Посмотреть сообщение
Думаю все так начинали.
Начинали ругаться на компилятор? Нет не все. Но многие: зависит от уровня - чем ближе к плинтусу, тем больше компилятор/интерпретатор виноват.

Здесь - я в этих делах, правах на открытие процесса, не сильно лучше тебя разбираюсь. В данном случае есть подозрение, что приложения, подписанные сертификатом майкрософт, могут делать OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION) не под админом (но, это только догадки).
0
17.05.2019, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2019, 21:32
Помогаю со студенческими работами здесь

Не могу написать в файл, путь не находит
Всем привет. Вот такой код: StreamWriter sw = new StreamWriter(@&quot;../TextFile.txt&quot;,true,...

Не могу задать норм путь к файлу
Есть у меня такой код: ..... using WMPLib; ..... WindowsMediaPlayer wmp = new...

не могу указать путь к архиву для распаковки
if (ZipFile.IsZipFile(openFileDialog1.FileName))//Проверка - действительно ли это Архив. { ...

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

Не могу указать путь к изображению (Image.Source)
Кидаю на форму Image. Иду в источник и добавляю туда изображение, но нажимая ОК мне выдается такая...

Не могу записать путь с бат файла в переменную
Здравствуйте! У меня есть bat файл который содержит в себе путь например С:\Program Files...


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

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

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