Опрос для выхода из процесса с использованием Perl - PullRequest
3 голосов
/ 31 января 2012

Я автоматизирую некоторые процедуры установки, используя Perl. Теперь я хочу знать, когда завершена процедура установки, которую я запустил. Как мне это сделать? Поскольку это работа по автоматизации, я не могу просить людей запускать некоторые команды позднее . Эта функциональность должна быть автоматической. Как мне это сделать в Windows?

Ответы [ 2 ]

4 голосов
/ 31 января 2012

В Windows используйте дескриптор процесса и вызовите WaitForSingleObject(), чтобы узнать, когда процесс завершится.Если у вас есть только идентификатор процесса, вы можете использовать OpenProcess(), чтобы получить указатель на него.(Конечно, если вы создали процесс самостоятельно с помощью CreateProcess(), у вас уже есть дескриптор.)

3 голосов
/ 31 января 2012

Ответ Грега Хьюгилла касается основных функций API Windows, которые вам нужны, но не о том, как их использовать в Perl.Для этого можно использовать модуль Win32 :: Process :

use strict;
use warnings;

use Win32::Process;

Win32::Process::Create(
  my $process,
  'C:\WINDOWS\system32\notepad.exe', # path of executable
  "notepad",                         # command line it sees
  0,                                 # don't inherit our handles
  NORMAL_PRIORITY_CLASS,             # process creation flags
  "."                                # current directory for process
) or die $^E;

print "started\n";

$process->Wait(INFINITE);

print "done\n";

$process->GetExitCode(my $exitcode) or die $^E;

print "process exit code $exitcode\n";

$process также можно передать в функции Win32 :: IPC wait_anyи wait_all, если вам нужно одновременно ожидать более одного объекта.

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