Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
1

Как узнать откуда запущен процесс

31.07.2014, 16:25. Показов 3252. Ответов 13
Метки нет (Все метки)

Как можно узнать папку, откуда работает процесс. Например фаил dllhost.exe запущен с папки c:/windows/system32/dllhost.exe. Возможно ли как нибудь по его имени найти эту папку?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2014, 16:25
Ответы с готовыми решениями:

Как узнать, запущен ли тот или иной процесс?
Всем доброго времени суток! Возникла следующая проблема: как можно программно узнать запущен тот...

Как проверить запущен ли процесс?
Если определенный процесс запущен то программа должна выводит сообщение.

Проверить, запущен ли процесс
Всем привет. Один раз спросил тут, но все таки не смог реализовать то что хотел. Нужен цикл...

Проверка, запущен ли процесс.
1 Здравствуйте, нужно написать программу для поиска процесса If поиск, запущен ли процесс...

13
9 / 9 / 5
Регистрация: 17.02.2012
Сообщений: 177
31.07.2014, 16:44 2
Delphi
1
2
3
4
5
var
  str: string;
begin
  str := ExtractFileDir(Application.ExeName);
end;
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
31.07.2014, 17:00  [ТС] 3
Не мой процесс, а другой
0
Native x86
Эксперт Hardware
5051 / 2922 / 847
Регистрация: 13.02.2013
Сообщений: 9,383
31.07.2014, 17:02 4
GetModulefileNameEx
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
31.07.2014, 17:13  [ТС] 5
Может кто подкинуть пример, я знаю только название процесса, ни его pID ни откуда он запущен не знаю, нужно найти
0
Эксперт Pascal/Delphi
4858 / 2735 / 845
Регистрация: 04.10.2012
Сообщений: 9,972
31.07.2014, 17:47 6
sample
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
31.07.2014, 18:00  [ТС] 7
Null выдает
0
Эксперт Pascal/Delphi
4858 / 2735 / 845
Регистрация: 04.10.2012
Сообщений: 9,972
31.07.2014, 18:16 8
Цитата Сообщение от Lauf Посмотреть сообщение
Null выдает
ОС какая?
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
31.07.2014, 18:42  [ТС] 9
Цитата Сообщение от droider Посмотреть сообщение
ОС какая?
Win 8.1 64
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
01.08.2014, 21:05  [ТС] 10
Вверх
0
Эксперт Pascal/Delphi
4858 / 2735 / 845
Регистрация: 04.10.2012
Сообщений: 9,972
01.08.2014, 21:20 11
Lauf, для x64 систем определение пути к процессу - довольно распространенная проблема. Не раз обсуждалась и на англоязычных форумах.
Самому интересно. Пытался реализовать через GetProcessImageFileName, получив предварительно PID процесса по имени - не пошло.
Для 32-разрядных систем, программа по ссылке выше, должна отработать как надо.

Нашел в сети
Delphi
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
var
  lpidProcess: array [0..$ffff] of DWORD;
  cbNeeded: DWORD;
  i: Integer;
  openprocesshandle: THandle;
  lphModule: HMODULE;
  lpFilename: array [0..MAX_PATH] of Char;
  len: Cardinal;
begin
  Memo1.Lines.Clear;
  if EnumProcesses(@lpidProcess, SizeOf(lpidProcess), cbNeeded) then
  begin
    for i:=0 to cbNeeded div SizeOf(DWORD)-1 do
    begin
      openprocesshandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, lpidProcess[i]);
      if openprocesshandle>0 then
      begin
        if EnumProcessModules(openprocesshandle, @lphModule, SizeOf(HMODULE), cbNeeded) then
        begin
          len:=GetModuleFileNameEx(openprocesshandle, lphModule, lpFilename, SizeOf(lpFilename));
          if len>0 then
            Memo1.Lines.Add(Copy(lpFilename, 1, len));
        end;
        CloseHandle(openprocesshandle);
      end;
    end;
  end;
end;
Отображает пути к множеству процессов. Однако, если процессов в системе больше, чем 4096, код отработает не айс.

Народ! Кто сталкивался, подключайтесь к теме.
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
01.08.2014, 21:44  [ТС] 12
хотите сказать на дельфи ни как? only c++?
0
Эксперт Pascal/Delphi
4858 / 2735 / 845
Регистрация: 04.10.2012
Сообщений: 9,972
01.08.2014, 21:58 13
Цитата Сообщение от Lauf Посмотреть сообщение
only c++?
необязательно. Это скорее уже грабли самой системы
0
0 / 0 / 0
Регистрация: 07.07.2013
Сообщений: 42
24.08.2014, 15:33  [ТС] 14
Все же пожалуй апну,
Есть такой код:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
   lclCurrProc: TProcessEntry32;
   lclPrntProc: TProcessEntry32;
   lclSnapHndl: THandle;
   lclEXEName: String;
   lclPrntName: String;
 
begin
    // Получить текущий список процессов
    lclSnapHndl := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
 
    // Сохраним имя экзешника
    lclEXEName := 'explorer.exe';
 
    // Нужно определить размер этих структур
    lclCurrProc.dwSize := SizeOf(TProcessEntry32);
 
 
    // Ищем текущие процессы
    Process32First(lclSnapHndl, lclCurrProc);
    repeat 
      if lclCurrProc.szExeFile = lclEXEName then
        Break;
    until (not Process32Next(lclSnapHndl, lclCurrProc));
 
end;
получается этот код из списка всех работающих программ ищет только explorer.exe
далее если найдет то нужно каким - то образом найти папку процесса. Подскажите пожалуйста. Да и будет ли работать такой код на x32? так как у меня на x64 работает без проблем

Добавлено через 13 часов 33 минуты
Все, справился сам.
Вот код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure GetProcessId; cdecl;
var
  hSnap:THandle;
  pe:TProcessEntry32;
  hp :Thandle;
  buffer:array [0..MAX_PATH-1] of Char;
begin
 pe.dwSize:=SizeOf(pe);
 hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  If Process32First(hSnap,pe) then
    While Process32Next(hSnap,pe) do
      if ExtractFileName(pe.szExeFile)= 'Название exe файла' then
      begin
        HP :=OpenProcess(PROCESS_ALL_ACCESS,False,pe.th32ProcessID);
        GetModuleFileNameEx(hp,0,buffer,SizeOf(buffer));
        ShowMessage(buffer);
      end;
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2014, 15:33

Как узнать, запущен ли процесс?
Добрый день. Как узнать запущен ли процесс? using System.Diagnostics; ... protected Process...

Как узнать запущен ли процесс?
Надо узнать запущен ли процесс и предпрянять какие либо действия.

Как узнать, что процесс не запущен
Смысл такой: таймер проверяет запущен ли процесс, например, "notepad" и если да, то label1.text =...

Как узнать откуда запущен bat файл при запуске от имени администратора?
Есть bat файл, который работает только от админа. Мне нужно сделать так, чтобы он удалял файл в...


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

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

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