Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

(tye)Re: Win32::TieRegistry and remote machines

by tye (Cardinal)
on Sep 21, 2001 at 20:04 UTC ( #113916=note: print w/ replies, xml ) Need Help??

in reply to Win32::TieRegistry and remote machines

You can use Win32::NetResource to connect to the machine with a specific username/password before having Win32::TieRegistry call RegConnectRemoteRegistry() which triggers an automatic attempt to connect by trying a few different username/password combinations in succession, which can take quite a while.

You could also implement your own time out. Doing that reliably with Perl isn't easy, but Win32 makes things worse. I have several ideas how to do this, but "the devil is in the details" and so there isn't one that seems worth fleshing out right now. Though spawning another program in the background and then being able to kill seems likely (super search has several threads on doing that in Win32).

Let me know what you try and how it works out.

(I don't think RegConnectRemoteRegistry() supports async operation, but I'll check into that as well.)

        - tye (but my friends call me "Tye")

Comment on (tye)Re: Win32::TieRegistry and remote machines
Re: (tye)Re: Win32::TieRegistry and remote machines
by rchiav (Deacon) on Sep 21, 2001 at 23:50 UTC
    Though this is hackish, it's going to suit my needs for now. This something that just needs to get the job done. I'll work more on it later, but for now, this block of code is going to make it work good enough..
    my $enum; eval {$enum = Win32::OLE::Enum->new("WinNT://$comp")}; unless ($enum) { print "$comp is not NT/2000\n"; return; }
    Thanks for the ideas. They got me thinking in a different direction.


    Update: *sigh* this doesn't work. Guess I'm trying to get this done too fast. I'll update when it *does* work. Update II:

    Here's what I ended up going with. It's not portable, but pulling registry entries isn't portable anyway. Win32::Process gave me what I needed...

    sub RegConnect { my ($pObj, $ExitCode); my $comp = shift; my $pString = "perl -MWin32::TieRegistry -e " . '"' . '$Registry->Connect(' ."'" . $comp . "', 'LMachine');" . '"'; Win32::Process::Create($pObj, "c:\\perl\\bin\\perl.exe", $pString, 0, NORMAL_PRIORITY_CLASS, ".")|| die "Can't create Perl Process: $!\n"; $pObj->Wait(7000); $pObj->GetExitCode($ExitCode); if ($ExitCode) { $pObj->Kill(1); return 0; } return 1; }
      This may be a bit off... but I was wondering, why not use Win32 module? It has the nice Win32::IsWinNT() and Win32::IsWin95(). I'm making a bit of assumption that Win32::IsWin95() would work with Win98 as well. I'm not sure. Anyways, just a suggestion - it may not fit your needs.

      Good Luck!
      - Moon

      Update: usual..assumption.. bad bad! Thanks tye!

        Because those only tell you about the local computer. The problem was to determine if a remote computer is running Win9x.

                - tye (but my friends call me "Tye")

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://113916]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (8)
As of 2014-12-26 00:44 GMT
Find Nodes?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?

    Results (163 votes), past polls