Приложение запущено пользователем или другим приложением? - PullRequest
1 голос
/ 26 августа 2009

Это очень общий вопрос: Мне было интересно, можно ли узнать, было ли приложение (любое приложение, независимо от того, является ли оно delphi-приложением, Java или любым другим) запущено пользователем или другим приложением? И если это возможно, и я вижу, что приложение было вызвано другим, могу ли я узнать, что такое «отец» приложение, которое называется новой программой?

Спасибо заранее!

РЕДАКТИРОВАТЬ: Может быть, это слишком общий - Как я могу увидеть, есть ли у приложения Delphi родительское приложение с самим Delphi, например, одно приложение было запущено службой, и мне нужно найти эту службу?

Ответы [ 4 ]

2 голосов
/ 26 августа 2009

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

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

Пример: взять оболочку Explorer (не Internet Explorer).

  1. Вы можете дважды щелкнуть любое приложение, чтобы запустить его. Родительским процессом будет файл explorer.exe.

  2. Вы можете щелкнуть правой кнопкой мыши по любому файлу, и загрузится несколько расширений контекстного меню. Некоторые из них могут запускать внешние приложения, скажем, для предварительного просмотра видео-файла (я видел это, клянусь!). Родительским процессом будет файл explorer.exe, но пользователь не выделил ни одного приложения. Он просто хочет просмотреть свойства файла. Он даже не знал, что приложения были запущены!

Пример: возьмите Total Commander или любые другие двухпанельные файловые менеджеры, которые поддерживают плагины для архивов.

  1. Вы можете дважды щелкнуть по любому приложение для его запуска. Родитель процесс будет totalcmd.exe.
  2. Вы можете ввести архивный файл и скопировать (извлечь) несколько файлов из него на ваш Папки для документов. соответствующий плагин может обрабатывать извлечение сам или запустить невидимый процесс справиться со всей работой. Все, что вы видите, это индикатор выполнения в Total Commander. Но есть новый процесс и его родитель снова is totalcmd.exe.

Нет различий между случаями 1 и 2 в обоих примерах.

Кстати, определение "запущено пользователем" неясно. Вы даже можете сказать, что ничего не может произойти без команды пользователя. Все эти фоновые процессы в случаях № 2 были запущены, потому что пользователь попросил об этом. Ну, пользователь явно не просил lauch, но он попросил саму операцию.

1 голос
/ 26 августа 2009

Вы видели этот вопрос ? Я не уверен, что вижу проблему прямо сейчас.

1 голос
/ 26 августа 2009

, если он запущен пользователем из windows, поэтому родительским будет explorer.exe , в противном случае родительским будет приложение, которое запускает процесс проверить родитель процесса, используя инструмент проверки ответа Андер Миллер.

1 голос
/ 26 августа 2009

Вы не упоминаете, хотите ли вы сделать это программно или ищете инструмент, чтобы просто показать информацию.

Если вы просто хотите просмотреть информацию, вы можете использовать Process Monitor, часть SysInternals:

http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

В меню «Инструменты» есть представление «Дерево процессов», в котором показано дерево с отношениями родительских и дочерних процессов, а также владелец каждого процесса.

Если вы хотите узнать больше о процессах, посмотрите на Process Explorer:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...