web-dev-qa-db-ja.com

PerlスクリプトをWindowsの通常のプログラムのように動作させるにはどうすればよいですか?

Perlスクリプトを他の実行可能ファイル(* .exeファイル)と同じように動作させたい。

  • myscript.plをダブルクリックすると、テキストエディターで開くのではなく、実行する必要があります。
  • myscript.plではなくPerl myscript.plを実行したい。
  • myscript.plではなくmyscriptを実行したいのですが。
  • program | myscriptではなくprogram | Perl myscript.plを実行したい。
  • ドラッグアンドドロップでスクリプトを実行できるようにしたい。

これらすべてを機能させるには、Windowsで行う必要のある変更がいくつかあります。ユーザーは通常、1つずつ機能しないものにつまずきます。エラーが発生したのか、Perlにバグがあるのか​​、Windowsにバグがあるのか​​、彼らが望んでいる振る舞いが不可能であるのか、彼らを混乱させます。この質問は、すべてを前もって機能させるための単一の参照点を提供することを目的としています。これらの問題が発生する前でも理想的です。

関連する質問:

37
Michael Carman

注:以下のアクションには管理者権限が必要です。コマンドプロンプトを使用する手順については、Windows Vista/Windows 7で[管理者として実行]から起動する必要があります。

* .plファイルをPerlに関連付ける

シェルプロンプトで次のコマンドを実行します。

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

C:\Perl\bin\Perl.exeをPerlインストールへのパスに置き換えます。これにより、myscript.plの代わりにPerl myscript.plを実行できます。

デフォルトのインストール場所は次のとおりです。

  • ActivePerl:C:\Perl
  • イチゴPerl:C:\Strawberry

.PLをPATHEXT環境変数に追加します。

これにより、WindowsはPATHを検索するときに* .plファイルを実行可能と見なします。 myscript.plの代わりにmyscriptを実行できます。

現在のcmdセッションに設定できます

set PATHEXT=%PATHEXT%;.PL

恒久的に設定するには(Windows VistaまたはWindows 7の場合)

setx PATHEXT %PATHEXT%;.PL

Windowsでは、XP GUIを使用する必要があります。

  1. [マイコンピュータ]を右クリックし、[プロパティ]をクリックします。
  2. 「詳細」タブをクリックします。
  3. [環境変数]をクリックします。
  4. PATHEXTを選択し、[編集]をクリックします。
  5. 現在の値に;.PLを追加します。

I/Oリダイレクトを機能させる

I/Oリダイレクション(program | myscriptなど)は、ファイルの関連付けを介して開始されたプログラムでは機能しません。問題を修正するためのレジストリパッチがあります。

  1. レジストリエディターを起動します。
  2. レジストリで次のキーを見つけてクリックします。HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. [編集]メニューの[値の追加]をクリックし、次のレジストリ値を追加します。
    • 値の名前:InheritConsoleHandles
    • データ型:REG_DWORD
    • 基数:Decimal
    • 値のデータ:1
  4. レジストリエディターを終了します。

警告:原則として、これはWindows XPでのみ必要です。私の経験では、Windows 7でも必要です。Windows10では、これは積極的に有害です。プログラムは実行されますが、stdout/stderrには何も生成されません。レジストリキーは、1ではなく0に設定する必要があります。

以下も参照してください。

レジストリへのパッチ適用がオプションではない場合、program | Perl -S myscript.plを実行することで、PATH内のスクリプトの煩わしさが軽減されます。

ドロップハンドラーを追加する

Perlのドロップハンドラーを追加すると、ドラッグアンドドロップでPerlスクリプトを実行できます。例えばWindowsエクスプローラーのファイルアイコンの上にファイルをドラッグし、そこにドロップします。次のスクリプトを実行して、必要なエントリをレジストリに追加します。

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

ユーザーが実行できるようになったら、 pl2bat を使用してPerlスクリプトをバッチファイルに変換します。

このトリックはPerl -xスイッチを介して機能し、perldoc perlrunに従って、Perlに最初の行を#!.*Perlのように検索させます。

7
Dallaylaen

受け入れられた回答の指示に従っても、Perl.exeがデフォルトのファイルハンドラーとして設定されている場合でも、ダブルクリックすると、Windows 10のメモ帳で.plファイルが開かれます。

ActivePerlでJack Wuのコメントを見つけた後。 .plファイルは実行されなくなり、代わりにメモ帳で開きます ダブルクリックでPerlスクリプトを実行することができました。

  • .plファイルを選択して右クリックします。
  • 「アプリケーションから開く」サブメニューを使用して「別のアプリを選択」します
  • [常にこのアプリを使用して.plファイルを開く]を選択します(今すぐ実行してください。プログラムを選択した後は、チャンスがありません)。
  • [その他のオプション]の一番下までスクロールして[その他のアプリ]を見つけ、[このPCで別のアプリを探す]を選択します
  • C:/ path/to/Perl/bin /に移動し、Perl5.16.3.exe(またはインストールしたPerlのバージョンに応じて同等のもの)を選択します。ただし、notPerl.exe

次に、.plファイルの横にPerlアイコンが表示され、ダブルクリックすると、必要に応じて毎回Perlで開くようになります。

1
ms609

Assocとftypeメソッドを試しましたが、うまくいきませんでした。

機能したのは、このレジストリキーの編集でした。

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

次のように設定されました:"C:\Perl64\bin\Perl.exe" "%1"

それがあるべき時:"C:\Perl64\bin\Perl.exe" "%1" %*

これはftypeと同じ内容ですが、難解なWindowsの理由から、そこにも設定する必要がありました。

0
Nyvis