2016-08-11 10 views
6

Я установил ActiveState Perl на моем новом ПК с Windows 10. Я установил ту же самую точную версию Perl на некоторых своих компьютерах, и она установлена ​​на 100-м ПК других пользователей в моей компании. Точно точная установка, созданная мной.Perl Скрипты в Windows 10 запускаются из проводника, но не в командной строке

Это первый раз, когда вы пытаетесь это сделать в Windows 10. Основные действия двойного щелчка на Perl-скрипте (* .pl) в Explorer заставляют открывать консольное окно и Perl запускать скрипт.

Кроме того, в командной строке Windows я могу ввести perl.exe script.pl, и скрипт работает нормально. Но, когда я просто набираю script.pl, ничего не происходит. Нет результата, ошибок, процессов perl.exe не видно в диспетчере задач.

В первый раз, когда я запустил скрипт Perl (из командной строки Windows, я полагаю, используя только синтаксис script.pl), Windows открыла окно с вопросом о том, какую программу я хотел использовать для открытия этого файла. Perl был по умолчанию, и я нажал ОК.

Я никогда не видел это окно в Windows 7 или 8, поэтому я думаю, что это что-то особенное для Windows 10, и что это то, что мешает мне просто набирать script.pl. Потому что, при запуске script.pl, я требую, чтобы ассоциации файлов выбирали нужную программу, но когда я набираю perl.exe script.pl, perl.exe запускается напрямую. Но, что Windows 10 «выбирает вашу программу по умолчанию», дело в том, что при запуске из командной строки мешает объединение файлов.

Не уверен на 100%, почему он работает в Explorer, однако, я уверен, что мне нужно очистить эту программу по умолчанию. Я удалил запись реестра для .pl файлов под HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts, но это не помогло.

Это, по-видимому, более общая проблема с Windows 10 или, возможно, только с моей установкой или с групповой политикой, о которой я не знаю.

следующие команды (запустить в командной администратора строке) отлично работает в ОС Windows 8.1, но не Windows, 10:

assoc .foo=Foobar 
ftype Foobar=C:\WINDOWS\system32\foo.bat %1 
echo @echo off > foo.bat 
echo echo The filename is %1 >> foo.bat 
echo hi > foo.foo 
foo.foo 

Результат должен быть выходной:

The filename is C:\WINDOWS\system32\foo.foo 

Но Windows 10 делает ничего. Кажется, это позволяет связать только встроенные приложения таким образом, а не сценарии BAT загруженных/установленных EXE.

+0

Что произойдет, если мы используем 'начать script.pl' –

+0

Использование' запуска script.pl' работает отлично. – jimtut

+0

Я удалил Perl 5.20.2 и установил последнюю версию (5.24.0), но без изменений. Я также изменил команду в реестре, чтобы открыть notepad.exe вместо perl.exe, и это работает прямо из DOS ('script.pl'). Кажется, что что-то перепутано с ассоциациями, которые вызывают perl.exe, хотя только с DOS, а не с Explorer. Возможно ли, что он вызывает wperl.exe каким-то образом? Не могу найти его в реестре, хотя ... – jimtut

ответ

4

Оказывается, что Microsoft изменила полярность настройки реестра в Windows 10, и это тоже кусает других программистов на Perl. Решение состоит в том, чтобы установить HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer \ InheritConsoleHandles значение "0".

MSDN пост здесь: https://social.msdn.microsoft.com/Forums/en-US/f19d740d-21c8-4dc2-a9ab-d5c0527e932b/nasty-file-association-regression-bug-in-windows-10-console

0

Убедитесь, что переменная окружения PATHEXT имеет .pl.

+0

Да, это делает: 'PATHEXT = .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC; .PL' – jimtut

+1

PATHEXT - это только чтобы вы могли отказаться от расширения из имени файла и все еще иметь возможность его выполнить. Вы можете «запустить» любой файл, даже JPG, просто набрав его имя файла в DOS. – jimtut