2009-08-26 3 views
1

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

Thnx заранее!

EDIT: Возможно, он слишком общий. Как узнать, имеет ли приложение Delphi родительское приложение с самой Delphi, например. одно приложение было запущено службой, и мне нужно найти эту услугу?

ответ

2

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

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

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

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

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

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

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

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

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

+0

thnx для ответа ... имеет смысл :) но что, если у вас есть запущенное приложение под названием «child» (какое-то приложение delphi), которое было запущено с другим приложением, называемым «parent», и если «child» отключается «parent» запускает «child» через 5 секунд после закрытия «child», нет ли способа узнать, есть ли такой «родитель»? Я действительно не знаю, как еще объяснить это. – doro

1

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

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

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

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

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

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

+0

Извините, я искал его программно ... – doro

+0

Вы должны указать, какой язык вы используете –

+0

Зачем ему указывать, какой язык он использует? – Rick

1

, если он запускается пользователем из окон так родительская будет explorer.exe, в противном случае родитель будет это приложение, которое запускает процесс. , чтобы проверить родителя процесса, используя проверку инструмента Ander Miller.

Смежные вопросы