Как передать аргументы командной строки через ассоциацию файлов в Vista 64?

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

Вопрос

Как передать аргументы командной строки через ассоциацию файлов в Vista 64?

Недавно я собрал компьютер под управлением 64-разрядной версии Vista Ultimate.Я заметил, что несколько переданных мною 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 оба вызова вернули 3 аргумента.Подробнее о своих расследованиях я задокументировал здесь (Обсуждение вики на win32.perl.org), но мне еще предстоит найти работающее решение.

Я также пробовал ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi, но безрезультатно.

Любая помощь будет оценена по достоинству.Это сводит меня с ума.

Это было полезно?

Решение

Я только что попробовал ActivePerl-5.10.0.1004-MSWin32-x64-287188.msi на своей Vista 64 Ultimate, и это сработало.

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

Это значит Девио прав:это должна быть проблема «ассоциации файлов»;

В проводнике щелкните правой кнопкой мыши файл .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 чувствителен к регистру ... просто потратьте час, пытаясь выяснить, почему параметры моей командной строки не передаются, и это было просто Я использовал argv [0] вместо ARGV [0] ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top