=head1 NOM perlwin32faq4 - Windows NT/2000 et Windows 9x =head1 DESCRIPTION Informations utiles à propos de Windows NT et Windows 9x pour les développeurs Perl =head2 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/ =head2 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 I. 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/ =head2 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/ =head2 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 C. 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 L). Si vous avez associé les scripts Perl avec l'extension I<.pl>, vous pouvez taper le nom du script sur la ligne de commande et Windows NT/2000 lancera I pour vous. Si vous changer la variable d'environnement C pour inclure les fichiers I<.pl>, comme ceci : SET PATHEXT=.pl;%PATHEXT% Vous pouvez taper le nom du fichier sans extension, et Windows NT/2000 trouvera le premier I<.pl> dans votre PATH avec ce nom. Vous pouvez préférer initialiser C 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é I 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 I, comme ceci : C:\> pl2bat helloworld.pl Il produira un fichier batch, I. 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 C, 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 L et aussi L. 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. =head2 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 I (tapez C sur la ligne de commande pour les détails). Pour des permissions plus complexes, voir L Pour des informations sur la fonction C, voir L. =head2 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 <, 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 C, 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 C, 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 L). Si vous avez réellement besoin d'un équivalent à sendmail pour Windows, plusieurs existent : =over =item B 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 =item B 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/ =item B 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/ =back =head2 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 : C. 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é C est disponible. Contrairement à l'outil UNIX cron, C 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 C, 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 I 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 L). 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 I 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 L , 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 C peut être un moyen approprié de planifier. Par exemple: $seconds = 180; sub action; while(1) { &action; sleep($seconds); } =head2 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 : =over =item * Cygwin (= GNU + Cygnus + Windows ) Portage Win32 de beaucoup d'outils GNU et un environnement complet de développement à la Linux : http://www.cygwin.com/ =item * Virtually Un*x! - divers portages de programmes UNIX pour Win32. http://www.tedfelix.com/SupaSoft/wuup.htm =back 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/ =head2 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 I, 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 : =over =item * Les services ne sont pas exécutés en interactif, bien que les commandes C et C puissent être utilisées pour arrêter et démarrer un serveur. Le panneau de contrôle Services est utilisé pour démarrer, arrêter ou pauser un service. =item * Les services n'agissent pas avec l'autorité d'un utilisateur loggé. Cela signifie que le service ne peut pas voir les variables d'environnement ou lire des fichiers réservés à un utilisateur loggé. Vous pouvez spécifier le compte utilisateur utilisé par un service dans le panneau de contrôle Services. =item * Les services tournent même quand personne n'est loggé sur la machine. =back 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 C) dans l'environnement système. =head2 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é C, livré avec le kit de ressources Windows NT. Une fois installé C, lisez le fichier I 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] =head2 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 C; lire ensuite le fichier d'aide : (?) - NdT] =head2 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, C, permet également de changer les permissions sur un fichier. Pour plus de détails, tapez C 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. =head2 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 I<.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 I<.pl>. Nous spécifions que l'interpréteur perl binaire, I, est responsable de ce type de fichier. Plusieurs serveurs Web exigent que vous associiez vos scripts à I avant de pouvoir les utiliser. Sur Windows 2000, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit : =over =item 1. Faites un double clic sur l'icône C. =item 2. Dans le menu C, choisissez C Ce qui ouvre la boîte de dialogue options. =item 3. Choisissez l'onglet C. Ce qui vous donne la liste des types de fichier couramment enregistrés (ou déjà associés dans Windows 2000) =item 4. Cliquez le bouton C. =item 5. Dans la boîte C, tapez ".pl" et cliquez OK. =item 6. Cliquez sur le bouton C. Ce qui ouvre la fenêtre C. =item 7. Cliquez sur le bouton C. Ce qui ouvre la boîte de dialogue C. Tapez "Ouvrir" dans la rubrique C (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 C, soit vous cliquez sur le bouton C pour sélectionner le fichier exécutable de l'interpréteur Perl. =item 8. Cliquez OK pour fermer la fenêtre C. Vous pouvez cliquer sur le bouton C si vous voulez trouver une icône qui correspond au type de fichier. Quand vous cliquez sur le bouton C, 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 C. Alors cliquez sur OK pour fermer la fenêtre C. =item 9. Cliquez sur OK pour fermer la fenêtre C. =item 10. Cliquez sur C pour fermer la fenêtre C. =back Sur Windows 9x et Windows NT 4.0, vous pouvez créer un nouveau type et lui associer l'interpréteur perl comme suit : =over =item 1. Ouvrez l'icône C sur le bureau. La fenêtre C devrait apparaître. =item 2. Dans le menu C de la fenêtre C, choisissez C. La boîte de dialogue C