Vista 64でファイルの関連付けを介してコマンドライン引数を渡すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/444388

質問

Vista 64でファイルの関連付けを介してコマンドライン引数を渡すにはどうすればよいですか?

最近、Vista Ultimate 64ビットを実行するPCを構築しました。コマンドライン引数が渡されなかったため、転送したPerlスクリプトのいくつかが失敗したことに気付きました。簡単なテストとして、次のように書きました(foo.pl):

#!/usr/bin/perl -w
use strict;
my $num_args = $#ARGV + 1;
print "${num_args} arguments read\n";
print "$^X\n" # to see what was being used

" foo.pl 1 2 3"の実行望ましくない結果:

0 arguments read
C:\strawberry\perl\bin\perl.exe

" perl foo.pl 1 2 3"の実行予想される結果:

3 arguments read
C:\strawberry\perl\bin\perl.exe

古いWindows XP PCでは、両方の呼び出しで3つの引数が返されました。私はここで私の調査の詳細を文書化しました( win32.perl.org wiki )、しかし、私はまだ機能する解決策を見つけていません。

ActivePerl-5.10.0.1004-MSWin32-x64-287188.msiも試してみました。

ご協力いただければ幸いです。これは私を苦しめています。

役に立ちましたか?

解決

Vista 64 UltimateでActivePerl-5.10.0.1004-MSWin32-x64-287188.msiを試したところ、動作しました。

F:\prog\perl>foo.pl 1 2 3
3 arguments read
C:\Perl64\bin\perl.exe

は、 devioは正しい:" file association"でなければなりません問題;

エクスプローラーで、.plファイルを右クリックして「開く」を選択します。「Perlコマンドラインインタープリター」を使用します。動作します(「このプログラムを常に使用してこのタイプのファイルを開く」を選択します)。

私にとって、「Vistaのファイル拡張子マネージャーは、関数に引数を渡す機能を削除しました」間違っているようです...


わかります:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Perl\shell\Open\command]
@="\"C:\\Perl64\\bin\\perl.exe\" \"%1\" %*"

インストールがレジストリにそのような値を入れなかった場合の意味は、次のとおりです。

  • ActivePerl-5.10.0.1004-MSWin32-x64-287188.msiのセットアップ中に関連付けを選択しませんでした
  • またはアカウントにレジストリに何かを書き込むための十分な権限がありません。

注:

  • Vistaの通常の拡張マネージャーは引数を渡さないようです( \" C:\\ Perl64 \\ bin \\ perl.exe \" \"%1 \" %* 引数なし)
  • レジストリの追加が必要です SOによって文書化されている

他のヒント

Vistaと64ビットについては知らないが、「クラシック」の下レジストリを編集できるWindowsのバージョン:

HKEY_CLASSES_ROOT\.pl 

デフォルトの文字列" Perl"が含まれています

HKEY_CLASSES_ROOT\Perl\shell\open\command 

デフォルトの文字列が含まれています:

"C:\path-to\Perl\bin\perl.exe" "%1" %*

ここで、%*は最初に続くすべてのパラメーターのマクロです。おそらく%*が欠落しています。

Vistaのファイル拡張子マネージャーは、プログラムに引数を渡す機能を削除しました。 devioの言及のようにレジストリを手動で編集する必要があります(または別のプログラムを使用してファイル拡張子を編集します)。

また、Perl初心者にとって興味深いのは、 ARGVが大文字と小文字を区別することです ...コマンドラインパラメータが渡されない理由を調べるために1時間を費やすだけです。 ARGV [0]の代わりにargv [0]を使用しました...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top