39 votes

Comment faire pour que mes scripts Perl se comportent comme des programmes normaux sous Windows ?

Je veux que mes scripts Perl se comportent comme n'importe quel autre exécutable (fichier *.exe).

  • Lorsque je double-clique sur myscript.pl Je veux qu'il s'exécute au lieu de s'ouvrir dans un éditeur de texte.
  • Je veux courir myscript.pl au lieu de perl myscript.pl .
  • Je veux vraiment courir myscript au lieu de myscript.pl .
  • Je veux courir program | myscript au lieu de program | perl myscript.pl .
  • Je veux pouvoir exécuter mon script par glisser-déposer.

Il y a un certain nombre de changements que vous devez faire sur Windows pour faire toutes ces choses. ces choses fonctionnent. Les utilisateurs tombent généralement sur des choses qui Ne le fais pas. travail un par à la fois, ce qui les laisse perplexes quant à savoir s'ils ont fait une erreur, s'il y a un bug dans Perl, un bogue dans Windows, ou si le comportement qu'ils souhaitent n'est tout simplement pas possible. Cette question a pour but de fournir un point de référence unique pour que tout fonctionne dès le départ. tout fonctionne dès le départ, idéalement avant même que ces problèmes ne surviennent.

Questions connexes :

61voto

Michael Carman Points 21983

Remarque : Les actions ci-dessous nécessitent des privilèges administratifs. Pour étapes utilisant l'invite de commande, celle-ci doit être lancée via "Exécuter en tant que administrateur" sur Windows Vista / Windows 7.

Associer les fichiers *.pl à perl

Exécutez les commandes suivantes à une invite du shell :

assoc .pl=PerlScript
ftype PerlScript=C:\bin\perl.exe "%1" %*

Remplacer C:\Perl\bin\perl.exe avec le chemin de votre installation Perl. Ce site vous permet d'exécuter myscript.pl au lieu de perl myscript.pl .

Les emplacements d'installation par défaut sont :

  • ActivePerl : C:\Perl
  • Strawberry Perl : C:\Strawberry

Ajouter .PL à votre variable d'environnement PATHEXT.

Cela permet à Windows de considérer les fichiers *.pl comme exécutables lors de la recherche dans votre PATH. Cela vous permet d'exécuter myscript au lieu de myscript.pl .

Vous pouvez le définir pour la session cmd actuelle

set PATHEXT=%PATHEXT%;.PL

Pour le paramétrer de façon permanente (sous Windows Vista ou Windows 7)

setx PATHEXT %PATHEXT%;.PL

Sous Windows XP, vous devez utiliser l'interface graphique :

  1. Cliquez avec le bouton droit de la souris sur Poste de travail, puis cliquez sur Propriétés.
  2. Cliquez sur l'onglet Avancé.
  3. Cliquez sur Variables d'environnement.
  4. Sélectionnez PATHEXT, puis cliquez sur Modifier.
  5. Ajouter ;.PL à la valeur actuelle.

Faire fonctionner la redirection des E/S

Redirection des E/S (par exemple program | myscript ) ne fonctionne pas pour les programmes lancés via une association de fichiers. Il existe un correctif de registre pour corriger ce problème.

  1. Lancez l'éditeur du registre.
  2. Localisez et cliquez sur la clé suivante dans le registre : HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. Dans le menu Édition, cliquez sur Ajouter une valeur, puis ajoutez la valeur de registre suivante :
    • Nom de la valeur : InheritConsoleHandles
    • Type de données : REG_DWORD
    • Radix : Decimal
    • Données de valeur : 1
  4. Quittez l'éditeur de registre.

Attention : En principe, cela ne devrait être nécessaire que sur Windows XP. D'après mon expérience, c'est également nécessaire sous Windows 7. Dans Windows 10, cela est activement nuisible - les programmes s'exécutent mais ne produisent rien sur stdout/stderr. La clé de registre doit être réglée sur 0 au lieu de 1.

Voir aussi :

Si Parcheando le registre n'est pas une option en cours d'exécution. program | perl -S myscript.pl est une solution de contournement moins ennuyeuse pour les scripts dans votre PATH.

Ajouter un gestionnaire de dépôt

L'ajout d'un gestionnaire de dépôt pour Perl vous permet d'exécuter un script Perl par glisser-déposer ; par exemple, en faisant glisser un fichier sur l'icône de fichier dans l'explorateur Windows et en le déposant à cet endroit. Exécutez le script suivant pour ajouter les entrées nécessaires au registre :

use Win32::TieRegistry;
$Registry->Delimiter("/");
$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};
$perlKey-> {"shellex/"} = {
    "DropHandler/" =>  {
        "/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"
}};

0 votes

Par curiosité, pourquoi fournissez-vous 4 techniques différentes pour les étapes ci-dessus alors que toutes les 4 peuvent être réalisées par une manipulation du registre ?

7 votes

Eh bien, "il y a plus d'une façon de le faire" après tout :)

3 votes

@ivancho : La raison principale est qu'il s'agit d'une collection de données recueillies à divers endroits. Une raison secondaire est une aversion pour l'utilisation d'un marteau de forgeron (édition du registre) lorsqu'un marteau de finition suffit. Cela dit, je trouverais utile une réponse complète du type "exécuter ce fichier *.reg", même si elle n'est pas très éclairante.

7voto

Dallaylaen Points 3877

Convertir vos scripts perl en fichiers batch en utilisant pl2bat une fois qu'ils sont prêts à être exploités par les utilisateurs.

L'astuce fonctionne grâce à la perl -x qui, selon perldoc perlrun fait en sorte que Perl recherche la première ligne comme suit #!.*perl .

6voto

Kirk Baucom Points 41

Je crois que l'article de Michael Carman "Associate *.pl files with perl" a un petit bug. La deuxième commande devrait se lire ftype PerlScript=C:\bin\perl.exe "%1" %* . Sans les guillemets autour de %1, tout script qui se trouve dans un chemin avec des espaces échouera.

El Win32 perl wiki a la syntaxe correcte, mais l'installateur Strawberry perl lui-même semble utiliser la version sans les guillemets. Je ne suis pas sûr de savoir quel est l'endroit approprié pour signaler le problème.

1voto

ms609 Points 653

Après avoir suivi les instructions de la réponse acceptée, un double-clic permet toujours aux fichiers .pl de s'ouvrir avec le Bloc-notes sous Windows 10, même lorsque perl.exe est défini comme gestionnaire de fichiers par défaut.

Après avoir trouvé le commentaire de Jack Wu à ActivePerl. Les fichiers .pl ne s'exécutent plus mais s'ouvrent dans le Bloc-notes. J'étais capable d'exécuter des scripts perl en double-clic comme tel :

  • Sélectionnez et cliquez avec le bouton droit de la souris sur un fichier .pl
  • Utilisez le sous-menu "Ouvrir avec" pour "Choisir une autre application".
  • Sélectionnez "Toujours utiliser cette application pour ouvrir les fichiers .pl" (faites-le maintenant - vous n'en aurez pas la possibilité après avoir sélectionné un programme).
  • Faites défiler jusqu'en bas des "Autres options" pour trouver "Plus d'applications", et sélectionnez "Rechercher une autre application sur ce PC".
  • Naviguez vers C:/path/to/perl/bin/ et sélectionnez Perl5.16.3.exe (ou l'équivalent, selon la version de Perl que vous avez installée : mais no Perl.exe )

L'icône Perl apparaît alors à côté des fichiers .pl et un double-clic permet de les ouvrir en Perl à chaque fois, comme souhaité.

1voto

Nyvis Points 1

J'ai essayé les méthodes assoc et ftype et elles n'ont pas fonctionné pour moi.

Ce qui a marché, c'est de modifier cette clé de registre :

Computer\HKEY_CURRENT_USER\Software\Classes\Applications\perl.exe\shell\open\command

Il a été réglé sur : "C:\Perl64\bin\perl.exe" "%1"

Quand ça devrait l'être : "C:\Perl64\bin\perl.exe" "%1" %*

Il s'agit du même contenu que le ftype, mais pour des raisons obscures de Windows, j'ai dû le définir là aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X