web-dev-qa-db-fra.com

Comment faire pour que mes scripts Perl agissent 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 exécuter 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 modifications que vous devez apporter à Windows pour que tout cela fonctionne. Les utilisateurs tombent généralement sur des choses qui ne fonctionnent pas une par une; les laissant confus s'ils ont fait une erreur, il y a un bogue dans Perl, il y a un bogue dans Windows, ou le comportement qu'ils veulent n'est tout simplement pas possible. Cette question est destinée à fournir un point de référence unique pour que tout fonctionne à l'avance; idéalement avant même que ces problèmes ne surviennent.

Questions connexes:

37
Michael Carman

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

Associer des 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. Cela vous permet d'exécuter myscript.pl au lieu de Perl myscript.pl.

Les emplacements d'installation par défaut sont:

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

Ajouter .PL à votre variable d'environnement PATHEXT.

Cela fait que Windows considère les fichiers * .pl comme exécutables lors de la recherche dans votre PATH. Il vous permet d'exécuter myscript au lieu de myscript.pl.

Vous pouvez le définir pour la session cmd en cours

set PATHEXT=%PATHEXT%;.PL

Pour le définir définitivement (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 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 d'E/S

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

  1. Démarrez l'Éditeur du Registre.
  2. Recherchez, puis cliquez sur la clé suivante dans le Registre: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. Dans le menu Edition, 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 du Registre.

Avertissement: En principe, cela ne devrait être nécessaire que sous Windows XP. D'après mon expérience, cela est également nécessaire dans 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 définie sur 0 au lieu de 1.

Voir également:

Si l'application de correctifs au registre n'est pas une option exécutant program | Perl -S myscript.pl est une solution de contournement moins ennuyeuse pour les scripts de 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 du fichier dans l'Explorateur Windows et en le déposant là. 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}"
}};
58
Michael Carman

Convertissez vos scripts Perl en fichiers batch en utilisant pl2bat une fois qu'ils sont prêts à être exécutés par les utilisateurs.

L'astuce passe par le Perl -x interrupteur qui, selon perldoc perlrun, fait que Perl recherche la première ligne comme #!.*Perl.

7
Dallaylaen

Après avoir suivi les instructions de la réponse acceptée, un double-clic a quand même conduit à l'ouverture de fichiers .pl avec le Bloc-notes dans Windows 10 - même lorsque Perl.exe a été défini comme gestionnaire de fichiers par défaut.

Après avoir trouvé le commentaire de Jack Wu sur les fichiers ActivePerl. .Pl ne s'exécutent plus mais s'ouvrent à la place dans le bloc-notes J'ai pu exécuter des scripts Perl en double-cliquant comme tels:

  • Sélectionnez et cliquez avec le bouton droit 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'aurez pas la chance après avoir sélectionné un programme)
  • Faites défiler vers le bas des "Autres options" pour trouver "Plus d'applications", puis sélectionnez "Rechercher une autre application sur ce PC"
  • Naviguez vers C:/chemin/vers/Perl/bin/et sélectionnez Perl5.16.3.exe (ou l'équivalent, selon la version de Perl que vous avez installée: mais pas Perl.exe)

Ensuite, l'icône Perl apparaît à côté des fichiers .pl et un double-clic les ouvre à chaque fois dans Perl, comme vous le souhaitez.

1
ms609

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

Ce qui a fonctionné était la modification de cette clé de registre:

Computer\HKEY_CURRENT_USER\Software\Classes\Applications\Perl.exe\Shell\open\command

Il était défini sur: "C:\Perl64\bin\Perl.exe" "%1"

Quand cela devrait être: "C:\Perl64\bin\Perl.exe" "%1" %*

C'est le même contenu que le ftype, mais pour des raisons de fenêtres mystérieuses, j'ai dû le mettre là aussi.

0
Nyvis