R
RBCS
Hallo zusammen
Hello I'v gota stupid questions
When I insert this scriptsnipe to my main Application, this part runs very
well but behind the main application crashes during this part is executing!
It crashes also even I take out the RunAsUser (AdminMisc) part!
Does someone has a idea?
use strict;
use warnings;
my $Domain = "Workgroup";
my $User = "testuser";
my $Password = "testiman";
my (@tasks);
my $taski=0;
#add some work!
$tasks[$taski] = ( "notepad" );
$taski++;
$tasks[$taski] = ( "msiexec" );
$taski++;
$tasks[$taski] = ( "notepad" );
#execute work
my $ResultofRunas = RunAs->User($Domain, $User, $Password, @tasks); print
"Result of Runas: $ResultofRunas"; #exit 0;
package RunAs;
use Win32::AdminMisc;
use POE qw(Wheel::Run Filter::Reference);
sub User{
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 "Successful! The new processes PID is $Result.\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 do_stuff {
binmode(STDOUT); # Required for this to work on MSWin32 my $task
= shift;
my $filter = POE::Filter::Reference->new(); my %result =
( task => $task,
status => "seems ok to me",
);
my $output = $filter->put( [ \%result ] ); print @$output;
}
}
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");
}
}
Hello I'v gota stupid questions
When I insert this scriptsnipe to my main Application, this part runs very
well but behind the main application crashes during this part is executing!
It crashes also even I take out the RunAsUser (AdminMisc) part!
Does someone has a idea?
use strict;
use warnings;
my $Domain = "Workgroup";
my $User = "testuser";
my $Password = "testiman";
my (@tasks);
my $taski=0;
#add some work!
$tasks[$taski] = ( "notepad" );
$taski++;
$tasks[$taski] = ( "msiexec" );
$taski++;
$tasks[$taski] = ( "notepad" );
#execute work
my $ResultofRunas = RunAs->User($Domain, $User, $Password, @tasks); print
"Result of Runas: $ResultofRunas"; #exit 0;
package RunAs;
use Win32::AdminMisc;
use POE qw(Wheel::Run Filter::Reference);
sub User{
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 "Successful! The new processes PID is $Result.\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 do_stuff {
binmode(STDOUT); # Required for this to work on MSWin32 my $task
= shift;
my $filter = POE::Filter::Reference->new(); my %result =
( task => $task,
status => "seems ok to me",
);
my $output = $filter->put( [ \%result ] ); print @$output;
}
}
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");
}
}