Warum wird der Task run einmal ausgefürt?

Warum wird der Task run einmal ausgefürt?

am 07.03.2006 13:12:33 von RBCS

Hallo

Weiss jemand warum in diesem script der task run nur einmal
die ausgeführt wird, einmal für $tasks und nie für $tasksa?

I have active state Perl v5.8.7 build 815!

Roman


#!/usr/bin/perl
############################################################ #################
## Name: samples/controls/controls.pl
## Purpose: Controls wxPerl sample
## Author: Mattia Barbon
## Modified by:
## Created: 29/10/2000
## RCS-ID: $Id: controls.pl,v 1.12 2004/10/19 20:28:13 mbarbon Exp $
## Copyright: (c) 2000, 2003 Mattia Barbon
## Licence: This program is free software; you can redistribute it and/or
## modify it under the same terms as Perl itself
############################################################ ##################
#

my $Domain = "GLION";
my $User = "banz";
my $Password = "soulman1291";
my (@tasks);
my $taski=0;

$tasks[$taski] = ( "notepad" );
$taski++;
$tasks[$taski] = ( "msiexec" );
$taski++;
$tasks[$taski] = ( "notepad" );
my $ResultofRunas = RunAs->logininfo($Domain, $User, $Password, @tasks);

my (@tasksa);
my $taskia=0;
$tasksa[$taskia] = ( "notepad" );
$taskia++;
$tasksa[$taskia] = ( "msiexec" );
$taskia++;
$tasksa[$taskia] = ( "notepad" );
$ResultofRunas = RunAs->logininfo($Domain, $User, $Password, @tasksa);
print "Result of Runas: $ResultofRunas";

package RunAs;

use Win32::AdminMisc;
use POE qw(Wheel::Run Filter::Reference);

sub logininfo{
my( undef, $Domain, $User, $Password, @Process ) = @_;

sub MAX_CONCURRENT_TASKS () { 3 }

my $Result = Win32::AdminMisc::LogonAsUser( $Domain,
$User,
$Password,
LOGON32_LOGON_INTERACTIVE );
if( $Result )
{
my $LogonUser = Win32::AdminMisc::GetLogonName();
print "Successfuly started process as $LogonUser.\n";

$Result = POE::Session->create
( inline_states =>
{ _start => \&start_tasks,
next_task => \&start_tasks,
task_result => \&handle_task_result,
task_done => \&handle_task_done,
task_debug => \&handle_task_debug,
}
);

if( $Result )
{

print "Successfuly executed!\n";
}
else
{
my $err= Error();
print"$err\n";
}
}
else
{
my $err = Error();
print"$err\n";
}

$poe_kernel->run();
my $logofresult = Win32::AdminMisc::LogoffAsUser();
print "Logging off...\n";

sub Error {
return( Win32::FormatMessage( Win32::AdminMisc::GetError() ) );
}

sub start_tasks {
my $heap = $_[HEAP];
while ( keys( %{ $heap->{task} } ) < MAX_CONCURRENT_TASKS ) {

my $next_task = shift @Process;
last unless defined $next_task;
print "Starting task for $next_task...\n";
my $task = POE::Wheel::Run->new
( Program => ["$next_task", , ],
StdoutFilter => POE::Filter::Reference->new(),
StdoutEvent => "task_result",
StderrEvent => "task_debug",
CloseEvent => "task_done",
);
$heap->{task}->{ $task->ID } = $task;
}
}

sub handle_task_result {
my $result = $_[ARG0];
print "Result for $result->{task}: $result->{status}\n";
}

sub handle_task_debug {
my $result = $_[ARG0];
print "Debug: $result\n";
}

sub handle_task_done {
my ( $kernel, $heap, $task_id ) = @_[ KERNEL, HEAP, ARG0 ];
delete $heap->{task}->{$task_id};
$kernel->yield("next_task");
}
}

Re: Warum wird der Task run einmal ausgefürt?

am 07.03.2006 14:20:10 von Christian Lackas

* RBCS [2006-03-07]:

Hallo Roman,

> $tasks[$taski] = ( "notepad" );
> $taski++;
> $tasks[$taski] = ( "msiexec" );
> $taski++;

ist das immer noch dein Ernst?
Das schreibt man in Perl als:

my @tasks = ('notepad', 'msiexec');

oder speziell hier auch einfach

my @tasks = qw(notepad msiexec);

Obiges ist wirklich eine Zumutung lesen zu müssen, womit ich das Parsen
deines auch abbrechen möchte. Vielleicht wühlt sich da ja noch jemand
anderes durch (wirklich minimal ist dein Skript auch nicht).

Gruß
Christian


--
Die Plicht ruft, wir rufen zurück.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker