perlwin32faq4 - Windows NT/2000 et Windows 9x


NOM

perlwin32faq4 - Windows NT/2000 et Windows 9x

Retour en haut de la page


DESCRIPTION

Informations utiles à propos de Windows NT et Windows 9x pour les développeurs Perl

Où trouver des informations sur Windows 2000 ?

Les fichiers d'aide joints à Windows 2000 sont une excellente source d'informations et peuvent répondre à la plupart de vos questions sur Windows 2000.

Le support du World Wide Web pour Windows 2000 peut être trouvé à:

    http://support.microsoft.com/

Où trouver des informations sur Windows NT ?

Un bon endroit pour démarrer est la documentation papier accompagnant Windows NT et sur le CD de Windows NT dans le répertoire support\books. Les fichiers d'aide de Windows sont également disponibles.

Des informations plus détaillées sur Windows NT sont disponibles avec le Kit de Ressources Windows NT , disponible dans les librairies et chez Microsoft. Microsoft TechNet est également une ressource utile.

Un support web pour Windows NT Server est disponibles à :

    http://www.microsoft.com/ntserver/

Le support Windows NT Workstation est sur :

    http://www.microsoft.com/ntworkstation/

Où trouver des informations sur Windows 9x ?

Une documentation papier est livrée avec Windows 9x, ainsi que quelques documentations sur le CD-ROM. Les fichiers d'aide sont disponibles depuis le menu démarrer.

Le support web pour Windows 95/98 est sur:

    http://www.microsoft.com/windows95/
    http://www.microsoft.com/windows98/

Quel est l'équivalent du shebang («#!») pour Win32 ?

Malheureusement, les plates-formes Win32 ne fournissent pas la syntaxe shebang, ou un équivalent. Vous pouvez essayer une des deux méthodes suivantes pour exécuter un script depuis la ligne de commande. Si tout échoue, vous pouvez toujours invoquer l'interpréteur perl directement, comme dans perl myscript.pl.

Bien que les systèmes Win32 eux-mêmes n'utilisent pas le shebang, le serveur web Apache lui si. Si vous utilisez le serveur web Apache sur votre système Win32 vous devriez mettre le shebang en tête de vos scripts CGI.

Votre ligne shebang devrait ressembler à :

        #!perl

Pour Windows NT 4.0/2000, la méthode la plus simple est d'utiliser les associations de fichiers (voir Comment associer les scripts Perl à perl ?). Si vous avez associé les scripts Perl avec l'extension .pl, vous pouvez taper le nom du script sur la ligne de commande et Windows NT/2000 lancera perl.exe pour vous. Si vous changer la variable d'environnement PATHEXT pour inclure les fichiers .pl, comme ceci :

    SET PATHEXT=.pl;%PATHEXT%

Vous pouvez taper le nom du fichier sans extension, et Windows NT/2000 trouvera le premier .pl dans votre PATH avec ce nom. Vous pouvez préférer initialiser PATHEXT dans le panneau de contrôle système plutôt que sur la ligne de commande. Sinon, vous aurez à le ressaisir à chaque fermeture de la fenêtre de commandes.

Une fois ceci fait, vous pouvez avoir un script Perl nommé cat.pl ressemblant à :

    while ( <> ) {
        print;
    }

et vous pouvez l'invoquer sur la ligne de commande comme :

    cat myfile.txt

Cependant, vous ne pouvez pas l'invoquer avec des redirections I/O comme :

    cat < myfile.txt
    cat myfile.txt | more

même si vous avez l'impression de pouvoir (c'est une limitation de Windows NT/2000). Vous pouvez soit avoir le fichier dans votre chemin, soit spécifier le chemin en appelant le fichier.

Notez que la méthode d'association de fichiers ne fonctionne pas sous Windows 9x, ni sous Windows NT/2000 si vous avez désactivé les extensions de commandes. Vous pouvez, cependant, démarrer le script depuis l'explorateur de Windows si l'extension est associée à perl.

Une autre option est d'utiliser l'utilitaire pl2bat distribué avec ActivePerl pour convertir votre script Perl en fichier batch. Ce qu'il fait est d'ajouter des instructions batch Win32 en tête du script pour que le système invoque l'interpréteur perl. En fait, c'est une programme batch plutôt malin.

Si vous invoquez l'utilitaire pl2bat sur votre script Perl helloworld.pl, comme ceci :

    C:\> pl2bat helloworld.pl

Il produira un fichier batch, helloworld.bat. Vous pouvez alors appeler le script comme ceci :

    C:\> helloworld
    Hello, World!

Vous pouvez passer des paramètres également. Votre script peut être dans votre PATH, ou un autre répertoire, et le code pl2bat le trouvera et l'exécutera correctement. Le grand avantage de ceci sur les associations de fichiers est que la redirection des Entrées/Sorties fonctionnera correctement.

pl2bat fournit nombre d'options pour contrôler la manière dont la conversion est faite, quelles options passer au Perl, etc.

Pour les détails voir la page de manuel pl2bat et aussi la page de manuel runperl.

PerlApp, disponible dans le Perl Dev Kit ( http://www.activestate.com/Products/Perl_Dev_Kit/ ), crée des fichiers .exe autonome à partir de scripts Perl. La redirection fonctionne correctement avec les fichiers .exe engendrés par PerlApp.

Quel est l'équivalent de chmod pour Win32 ?

Il n'y a pas d'équivalence directe à chmod sur les systèmes Win32. Pour les attributs de fichiers, vous pouvez utiliser la commande en ligne ATTRIB (tapez HELP ATTRIB sur la ligne de commande pour les détails). Pour des permissions plus complexes, voir Comment assigner des droits à un ficher ?

Pour des informations sur la fonction chmod(), voir Comment fonctionne la fonction chmod() sur les plates-formes Win32 ?.

Comment envoyer des emails depuis ActivePerl ?

Vous pouvez tomber sur des scripts qui envoient des messages avec un programme externe, comme dans :

        #!/usr/bin/perl
        open(MAIL, '| /usr/lib/sendmail user@there.com') or die "$!";
        print MAIL <<EOF;
        To: user@there.com
        From: user@here.com
        Hello, World!
        EOF

Ce type de script amène généralement les gens à demander, «existe-t-il un équivalent à sendmail sur Windows?» Si vous avez besoin d'envoyer un email depuis un script Perl, il n'est pas nécessaire d'utiliser un programme externe comme sendmail. Le package libnet inclut Net::SMTP, un module qui peut être utilisé pour envoyer des emails. Voici un exemple :

        use Net::SMTP;
        $smtp = Net::SMTP->new('here.com'); # Connexion à un serveur SMTP
        $smtp->mail( 'user@here.com' );     # expéditeur
        $smtp->to('user@there.com');        # destinataire
        $smtp->data();                      # Début du mail
        # Envoi de l'entête.
        #
        $smtp->datasend("To: user@there.com\n");
        $smtp->datasend("From: user@here.com\n");
        $smtp->datasend("\n");
        # Envoi du corps du message.
        #
        $smtp->datasend("Hello, World!\n");
        $smtp->dataend();                   # Fin d'envoi
        $smtp->quit;                        # Fermer la connexion SMTP

Une autre alternative est Mail::Sender, qui peut être utilisé comme ceci :

        use Mail::Sender;
        $sender = new Mail::Sender {smtp => 'mail.yourdomain.com', from => 'your@address.com'};
        $sender->MailFile({to => 'some@address.com', subject => 'Here is the file',
                             msg => "Voici le fichier requis.",
                           file => 'fichier.txt'});

Ou Mail::Sendmail, qui peut-être utilisé comme :

        use Mail::Sendmail;
        %mail = ( To      => 'you@there.com',
                  From    => 'me@here.com',
                  Message => "Petit message"
                 );
        if (sendmail %mail) { print "Mail sent OK.\n" }
        else { print "Error sending mail: $Mail::Sendmail::error \n" }

Un script Perl pour poster des messages sans utiliser un programme externe est aussi disponible sur la page Perl pour Win32 de Robin Chatterjee (voir Existe-t-il des sources d'information disponibles sur ActivePerl sur le World Wide Web ?).

Si vous avez réellement besoin d'un équivalent à sendmail pour Windows, plusieurs existent :

Blat
Blat est un programme du domaine public pour envoyer des emails depuis Windows NT en ligne de commande. Bien qu'il soit réputé pour fonctionner sous Windows 95, les auteurs de Blat ne l'ont pas testé sous Windows 95. La page de Blat est à : http://gepasi.dbs.aber.ac.uk/softw/Blat.html

sendmail
Microsoft a un portage de sendmail disponible sur son site FTP à ftp://ftp.microsoft.com/developr/drg/unix-to-windows/ports/sendmail/

Un produit sendmail commercial est disponible chez MetaInfo, Inc. Une version d'évaluation est disponible sur http://www.metainfo.com/

wrmail
Un autre produit mail commercial est wrmail, il fait partie du produit slmail de Seattle Labs. Une version gratuite est disponible sur http://www.seattlelab.com/

Comment planifier des tâches sur les plates-formes Win32 ?

L'utilitaire UNIX cron n'existe pas sur les plates-formes Win32.

Pour Windows 2000, il y a un planificateur disponible. On peut y accéder par le menu Démarrer : Démarrer | Paramètres | Panneau de configuration | Tâches Planifiées. En cliquant «Création d'une tâche planifiée», vous lancez l'assistant des Tâches planifiées qui vous guide durant tout le processus.

Pour Windows NT, un outil de planification appelé AT est disponible. Contrairement à l'outil UNIX cron, AT ne stocke pas ses tâches dans un fichier texte, mais se configure en ligne de commande. Notez que les commandes AT semblent très pointilleuses avec la syntaxe. Voici un exemple :

    at 23:37 /interactive /every:M,T,W,Th,F,S,Su cmd /c "c:\perl\bin\perl.exe c:\test.pl"

Si vous n'aimez pas la version ligne de commande de AT, il existe une version GUI, WinAT, disponible avec le Kit de ressources Windows NT. Le service «Schedule» doit tourner quand votre tâche est supposée s'exécuter.

Vous pouvez rencontrer des problèmes avec AT ou WinAT si le script ou le programme planifié requièrent des droits spéciaux autres que ceux possédés par «System» (c'est-à-dire, si cela utilise le domaine NT). C'est parce que NT ne vous autorise pas correctement à utiliser des services NT préinstallés, comme le «Schedule» comme étant un utilisateur avec des privilèges réseau. Il peut sembler que vous pouvez configurer le planificateur pour se connecter comme un utilisateur avec des privilèges réseau, mais le service ne reconnaît pas les droits de cet utilisateur et l'utilisateur système a seulement des droits locaux.

Une solution cron tout-en-Perl qui utilise un fichier crontab à la Unix existe à http://www.megadodo.demon.co.uk/perl/ . Ce script peut être lancé comme un service NT (voir Comment exécuter un script Perl comme un service Windows NT ?). Quand vous créez votre propre service NT, NT vous laisse fixer le couple utilisateur/mot de passe, et ces services reconnaissent les droits correspondants. Donc le script ou programme planifié aura les droits nécessaires.

[voir aussi cron pour Windows : http://www.kalab.com/freeware/cron/cron.htm -NdT]

Il existe quelques planificateurs commerciaux. NTcrond, disponible chez ifdef software: http://www.ifdef.com/ et AutoTask2000 chez http://www.cypressnet.com/ . Ces programmes devraient reconnaître les droits de l'utilisateur sous le nom duquel il tourne pour permettre au script ou programme planifié de fonctionner correctement.

Pour Windows 9x, il y a un agent système disponible avec le pack Microsoft Plus!. De plus, plusieurs sharewares (NdT : Partagiciels pour les puristes) de planification, notamment LaunchPad et Metz Scheduler sont disponibles. On peut les trouver avec un bon moteur de recherche de shareware, par exemple http://www.shareware.com/ . Il existe également un composant optionnel «Planificateur de Tâches» avec IE4.01 et Windows 98.

Parce que le planificateur sous NT tourne comme un service (voir Qu'est-ce qu'un service Windows NT ? , vous devez prendre des précautions pour être sûr que les fichiers et variables d'environnement soient accessibles au script.

Dans certains cas, la fonction interne Perl sleep peut être un moyen approprié de planifier. Par exemple:

        $seconds = 180;
        sub action;
        while(1) {
                &action;
                sleep($seconds);
        }

Où trouver des portages Win32 des outils UNIX ?

Vous devriez jeter un oeil au fichier d'aide de Windows NT et Windows 9x pour voir s'il y a un équivalent approximatif distribué avec votre plate-forme Win32. Sinon, essayez une de ces URLs :

Il existe également plusieurs outils type-UNIX sur le Kit de Ressource de Windows NT.

Finalement, il existe plusieurs packages commerciaux UNIX-à-Win32, y compris le MKS de Mortice Kerns Systems, Inc.: http://www.mks.com/ .[Voir aussi U/WIN - Unix for Windows : http://www.research.att.com/sw/tools/uwin/ - NdT]

Vous pouvez aussi consulter le Perl Power Tools, en développement sous le projet UNIX Reconstruction. Là, vous pouvez trouver des outils UNIX réimplémentés en tout-Perl. La dernière version est sur http://www.perl.com/language/ppt/

Qu'est-ce qu'un service Windows NT ?

Sur Windows un service est un programme spécial qui s'exécute en tâche de fond [un daemon, dans le langage Unix]. Les services sont utilisés pour les programmes qui tournent en permanence, comme les protocoles réseau ou les serveurs de bases de données. La plupart des serveurs WWW sur Windows NT/2000 sont implémentés en service.

Un service diffère d'un programme classique par plusieurs points :

Le plus important est de penser à prendre les précautions pour rendre les ressources disponibles aux services. En général, vous avez besoin de rendre les fichiers disponibles pour le groupe Tout le monde, et d'avoir les variables d'environnement (comme PATH) dans l'environnement système.

Comment exécuter un script Perl comme un service Windows NT ?

Vous pouvez exécuter vos scripts Perl comme des services Windows NT avec un programme appelé srvany.exe, livré avec le kit de ressources Windows NT. Une fois installé srvany.exe, lisez le fichier srvany.wri qui devrait l'accompagner. Ce document expliquera comment modifier la base de registres pour votre nouveau service.

Après l'installation pour lancer votre script comme un service faite :

        x:>srvany perl script.pl

[ Le module Win32::Daemon permet d'écrire directement un script comme un service :

 http://www.roth.net/perl/Daemon/

-NdT]

Comment exécuter un script Perl comme un service Windows 2000 ?

Vous pouvez lancer vos scripts Perl comme des services Windows 2000 en accédant à MMC (Microsoft Management Console). Les fichiers d'aide de Windows 2000 contiennent beaucoup d'informations sur la manière de lancer MMC et comment vous pouvez l'utiliser pour les scripts Perl. [Dans une console DOS, lancez MMC avec la commande mmc; lire ensuite le fichier d'aide : (?) - NdT]

Comment assigner des droits à un ficher ?

Les plates-formes Win32 n'ont pas les mêmes mécanismes pour fixer les permissions de fichiers qu'UNIX. Pour les fichiers sur partition FAT (c'est-à-dire tous les fichiers sous Windows 9x), vous n'avez pas à fixer les droits explicitement. Tous les fichiers sont disponibles pour tous les utilisateurs.

Pour les fichiers sur une partition NTFS sur Windows NT/2000, vous pouvez définir les droits des fichiers avec l'explorateur Windows et les propriétés du fichier. Cliquez-droit sur le fichier dans l'explorateur, et choisissez Propriétés dans le menu déroulant. Choisissez l'onglet Sécurité, et cliquez Permissions pour choisir les droits du fichier. Cliquez Aide pour plus d'information.

Un programme en ligne de commande, CACLS, permet également de changer les permissions sur un fichier. Pour plus de détails, tapez HELP CACLS sur la ligne de commande.

Les machines Windows 9x administrées par Novell peuvent avoir des comptes et droits similaires à NT. Cependant, ces permissions doivent être configurées par l'administrateur Novell.

Comment associer les scripts Perl à perl ?

Sur les systèmes Windows, l'association est le processus qui spécifie quel type de programme utiliser pour quel type de fichier. Les fichiers sont regroupés par type de fichiers, comme les fichiers JPEG ou les scripts Perl. Le type d'un fichier est identifié par son extension (toutes les lettres après le dernier «.» dans le nom du fichier).

Par exemple, disons que nous avons un type appelé fichier texte, avec l'extension .txt, et qui est géré par le Notepad.

Habituellement, les programmeurs Perl pour Win32 créent un type de fichier comme Script Perl et lui associent l'extension .pl. Nous spécifions que l'interpréteur perl binaire, perl.exe, est responsable de ce type de fichier. Plusieurs serveurs Web exigent que vous associiez vos scripts à perl.exe avant de pouvoir les utiliser.

Sur Windows 2000, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit :

  1. Faites un double clic sur l'icône Poste de travail.

  2. Dans le menu Outils, choisissez Options des dossiers... Ce qui ouvre la boîte de dialogue options.

  3. Choisissez l'onglet Types de fichiers. Ce qui vous donne la liste des types de fichier couramment enregistrés (ou déjà associés dans Windows 2000)

  4. Cliquez le bouton Nouveau.

  5. Dans la boîte Extension de fichier, tapez «.pl» et cliquez OK.

  6. Cliquez sur le bouton Avancée. Ce qui ouvre la fenêtre Modification du type de fichier.

  7. Cliquez sur le bouton Nouveau. Ce qui ouvre la boîte de dialogue Nouvelle action. Tapez «Ouvrir» dans la rubrique Action (puisque vous voulez que les fichiers Perl soient «ouverts» par l'interpréteur Perl). Alors, soit vous tapez le chemin complet vers l'interpréteur Perl dans la rubrique Application utilisée pour exécuter cette action, soit vous cliquez sur le bouton Parcourir... pour sélectionner le fichier exécutable de l'interpréteur Perl.

  8. Cliquez OK pour fermer la fenêtre Nouvelle action. Vous pouvez cliquer sur le bouton Changer d'icône si vous voulez trouver une icône qui correspond au type de fichier. Quand vous cliquez sur le bouton Changer d'icône, vous pouvez faire votre choix dans une sélection d'icônes ou vous pouvez regarder à un emplacement différent. Si vous voulez utiliser une icône Perl pour les fichiers «.pl», regardez dans le répertoire où se trouve l'interpréteur Perl, choisissez l'interpréteur Perl et cliquez sur le bouton Ouvrir. Alors cliquez sur OK pour fermer la fenêtre Changer d'icône.

  9. Cliquez sur OK pour fermer la fenêtre Modification du type de fichier.

  10. Cliquez sur Appliquer pour fermer la fenêtre Options des dossiers.

Sur Windows 9x et Windows NT 4.0, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit :

  1. Ouvrez l'icône Poste de Travail sur le bureau. La fenêtre Poste de Travail devrait apparaître.

  2. Dans le menu Affichage de la fenêtre Poste de Travail, choisissez Options. La boîte de dialogue Option apparaît.

  3. Dans la boîte de dialogue Options, sélectionnez l'onglet Types de Fichiers.

  4. Cliquez le bouton Nouveau. La boîte de dialogue Ajouter Nouveau Type de Fichier apparaît.

  5. Dans la case Description du type, tapez «Perl Script».

  6. Dans la case Extension Associée, tapez «.pl».

  7. Laissez la case Type de Contenu (MIME) vide.

  8. Cliquez le bouton Nouveau sous la liste Action. La boîte de dialogue Nouvelle Action apparaît.

  9. Dans la case Action, taper «Ouvrir» (C'est important d'utiliser ce nom pour l'action!).

  10. Dans la case Application utilisée pour exécuter cette action, tapez [chemin complet de perl]\perl.exe %1 %*, où [chemin complet de perl] est le chemin complet de perl.exe sur votre machine. Si perl est dans votre chemin, vous pouvez mettre juste perl.exe, mais pour des raisons ésotériques il est mieux de mettre le chemin complet. De même, si le chemin jusqu'à l'interpréteur comprend des espaces (comme C:\Program Files\perl5) mettez-le chemin DOS à la place (C:\progra~1\perl5).

  11. Cliquer OK pour fermer la boîte de dialogue Nouvelle Action.

  12. Cliquer OK pour fermer la boîte de dialogue Ajouter Nouveau Type de Fichier.

  13. Cliquer OK pour fermer la boîte de dialogue Options.

Vous pouvez tester votre association en double cliquant sur un script perl dans l'explorateur Windows. Si perl.exe démarre et exécute le script, les choses sont OK.

Dans Windows NT 4.0, vous pouvez éviter tout le sac de noeuds ci-dessus en tapant ce qui suit sur la ligne de commande :

    ASSOC .pl=PerlScript
    FTYPE PerlScript=[full path to perl]\perl.exe %1 %*

Pour plus d'information sur ces commandes, tapez HELP FTYPE au prompt.

Notez que, pour que cela fonctionne, vous devez avoir les extensions de commandes activées. (Elles le sont par défaut ; vous saurez si vous les avez désactivées.)

Pourquoi 'perl -e' ne fonctionne-t-il pas ?

Il fonctionne - C'est juste que certains interpréteurs de commandes (par exemple COMMAND.COM, CMD.EXE et 4DOS) n'acceptent pas les simples quotes autour des commandes.

Le moyen le plus sûr pour faire du perl monoligne est d'entourer les paramètres entre " " (double-quotes) et d'utiliser q() et qq() à l'intérieur des paramètres. q() et qq() avec ce qui est à l'intérieur entre simple-quotes ou double-quotes, respectivement.

Par exemple:

  perl -e "use LWP::Simple; while(@c = head <>)
  { $c = join qq(\n\t), @c; print qq(Header info:\n\t$c\n); }"

(C'est une seule ligne)

Lancez-le depuis la ligne de commande et tapez l'URL de votre site favori, comme http://www.perl.com/ ...

Quels sont les éditeurs disponibles sous Windows?

Windows est livré avec deux éditeurs qui sont parfaits pour le Perl, NotePad et WordPad. Mais, si vous avez besoin de plus de fonctionnalités pour simplifier la saisie, voici une liste d'éditeurs gratuits et commerciaux :

Retour en haut de la page


AUTEUR ET COPYRIGHT

Cette FAQ a été à l'origine assemblée et maintenue par Evangelo Prodromou. Elle a été révisée et mise à jour par Brian Jepson de O'Reilly and Associates, et David Grove et David Dmytryshyn d'ActiveState.

Cette FAQ est dans le domaine public. Si vous l'utilisez, cependant, vérifiez, s'il vous plaît, que vous donniez le crédit aux auteurs originaux.

Retour en haut de la page


VERSION FRANÇAISE

Cette traduction française correspond à la version anglaise distribuée avec perl 5.8.0. Pour en savoir plus concernant ces traductions, consultez http://www.enstimac.fr/Perl/ .

Retour en haut de la page


TRADUCTION EN FRANÇAIS

Fabien Martinet <ho.fmartinet@cma-cgm.com>

Jean-Louis Morel <jl_morel@bribes.org> (mise à jour perl 5.8.0)

Retour en haut de la page

 perlwin32faq4 - Windows NT/2000 et Windows 9x