Maybe system() isn't the right way to go with this.  Try using backticks
(`net use * \\\\server\\share`) or use the Win32::Lanman modules
NetShareAdd() function.  My personal take on system() and backticks is that
they should only be used when absolutely necessary.  You can control what
Perl does, but you can't always control someone's system.

-----Original Message-----
From: Francoys Crepeau
To: [EMAIL PROTECTED]
Sent: 3/15/02 8:58 PM
Subject: Problems running Win32's "net use" with system()

Hi everyone! I hope someone can tell me what I'm doing wrong.

I'm running ActivePerl 5.6 on an NT4 (service pack 5) box. 

One of the things I have to do is to have a Perl script "map" a network
drive to a drive letter. 

When one manually does this from the command line, it is done using the
"net use" command, specifying as parameters the destination drive letter
(or a wildcard to get the first available one) and the network drive.

I'm trying to do this by calling system() from my Perl script, but the
call to system() fails. However, if I type the same command at the
command line, it works.

I thought at first that I might not be correctly invoking the system()
function, but I am able to use it to have the "dir" command executed.

Shown below is the source of my test program:

#***** START OF TEST PROGRAM
use strict;
use warnings;
use diagnostics;

# For unbuffered I/O.
$| = 1;

# Set up the arguments for the calls to system().
my( @sysargs0 ) = ( 'dir', '..' );
my( @sysargs1 ) = ( 'net use', '*',  '\\\\rndnt55\\rndapps' );

# Just do a call to the Win32's "dir .." command.
# Works OK.
system( @sysargs0 ) == 0
  or die( "system( \@sysargs0 ) failed: $?" );

# For verification, see what system() is receiving.
for( my $i = 0; $i <= $#sysargs1; $i++ ) {
  print( "\t\$sysargs1[ $i ] = $sysargs1[ $i ]\n" );
}

# This call to Win32's "net use" fails. !?!?!
if( system( @sysargs1 ) != 0 ) {
  my( $exitValue ) = $? >> 8;
  my( $signalNum ) = $? & 127;
  my( $dumpedCore ) = $? & 128;

  print( "\t\$exitValue = $exitValue\n" );
  print( "\t\$signalNum = $signalNum\n" );
  print( "\t\$dumpedCore = $dumpedCore\n" );

  die( "system( \@sysargs1 ) call failed: $?" );
}
#***** END OF TEST PROGRAM

************************************************************************
Francoys Crepeau
Ottawa, Ontario, Canada
mailto:[EMAIL PROTECTED] 



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--------------------------------------------------------------------------------
This email may contain confidential and privileged 
material for the sole use of the intended recipient. 
If you are not the intended recipient, please contact 
the sender and delete all copies.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to