-----Original Message-----
From: Chas Owens [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, February 01, 2006 3:25 PM
To: Ryan Frantz
Cc: Timothy Johnson; beginners@perl.org
Subject: Re: Win32::Process::Info - Get Owner Information

>On 2/1/06, Ryan Frantz <[EMAIL PROTECTED]> wrote:
>snip
>> The script will process the first host in the list, begin processing
the
>> second host, and then perl.exe dies with a popup asking me to send
>> details to M$.  I'm not very fluent with OOP, but is it possible that
>> the first object has to be destroyed before the next is created?  Or
is
>> this automatic?
>>
>> BTW, I'm running ActiveState Perl 5.8.2 on WinXP SP2.  The
>> Win32::Process::Info module was installed via 'ppm'.
>snip
>
>Perl has reference count garbage collection.  When an object has no
>references left it is marked for recycling.  The $processObj and
>@procInfo are marked as "my" or lexical variables.  This means they
>will go out of scope when outside of the braces that contain them.  In
>your case that would be the end of getProcInfo.  When the references
>go out of scope the object's reference count gets decremented.
>
>Have you tried the "die" code I sent in an earlier email?



In this case it might not even help.  If $processObj->GetProcInfo()
fails, Win32::OLE will throw an exception and end the script.  Oddly
enough, even setting "Win32::OLE->Option(Warn => 0)" doesn't seem to
help, so if it was working correctly, then it would die anyway.

I tried this code, slightly rewritten:

#######################################################

use warnings;
use strict;
use Win32::Process::Info;
my @servers = ($ENV{COMPUTERNAME},"othersystem1",'othersystem');
@servers = sort @servers;
use Win32::OLE;
Win32::OLE->Option(Warn => 0);
$| = 1;

sub getProcInfo {
    my $server = shift @_;
    if(my $processObj = Win32::Process::Info->new( $server, 'WMI' )){
        my @procInfo = $processObj->GetProcInfo();

        # this should give us a list of anonymous hashes...foreach my
$info (@procInfo) {if ( ref $info ) {my $procName;
        foreach my $info(@procInfo){
            if ( ref $info ) {
                my $procName;
               my $procOwner;
                $procName = ${$info}{Name};
                $procOwner = ${$info}{Owner};

                if ( $procName and $procOwner ) {#print "\n";
                    print $procName . ": " . $procOwner . "\n";
                }
            }else{
                print "Info: $info\n";
            }
        }
        return 1;

    }else{
        return 0;
    }
}

foreach my $server (@servers) {
    print "\n-- $server --\n";
    getProcInfo($server) || print "FAILED!\n\n";
}

#########################################################


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to