Как передать аргументы командной строки через ассоциацию файлов в Vista 64?
-
22-07-2019 - |
Вопрос
Как передать аргументы командной строки через ассоциацию файлов в 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] ...