ODBC + freetds + библиотека оболочки Python для ODBC.
Я выяснил, в чем проблема. Хотя значения ftype и assoc были установлены, как было предложено, фактическое поведение в моей системе, похоже, определяется ключом реестра
HKEY_CLASSES_ROOT\Applications\perl.exe\shell\open\command
. Строковое значение (по умолчанию)
должно быть "C : \ Perl \ bin \ perl.exe ""% 1 "% *
Когда я нашел эту запись, она была установлена на " C: \ Perl \ bin \ perl.exe ""% 1 "
. Его замена сразу устранила проблему.
Почему это было установлено именно так? Я не знаю. Может быть, из предыдущей установки?
В любом случае, спасибо за предложения, и я надеюсь, что этот ответ поможет и кому-то другому.
Обновление: Учитывая, что следующее верно, остается только убедиться, что расширения команд не отключены. Попробуйте ввести в командной строке
cmd / e: on
, прежде чем запускать тесты. См. Также документацию по cmd Windows XP :
Включение и отключение расширений команд
Расширения команд включены в Windows XP по умолчанию. Вы можете отключить их для определенного процесса, используя / e: off. Вы можете включить или отключить расширения для всех параметров командной строки cmd на компьютере или в пользовательском сеансе, установив следующие значения
REG_DWORD
:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command Processor \ EnableExtensions \ REG_DWORD
HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor \ EnableExtensions \ REG_DWORD
Задайте значение REG_DWORD равным
0x1 [11] включен) или
0x0
(то есть отключен) в реестре с помощью Regedit.exe. Заданные пользователем параметры имеют приоритет над параметрами компьютера, а параметры командной строки имеют приоритет над параметрами реестра.
E:\Temp> assoc .pl .pl=Perl
E:\Temp> ftype Perl Perl="C:\opt\Perl\bin\perl.exe" "%1" %*
E:\Temp> @echo %PATHEXT% .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PL;.PLX;.WPL;.py;.pyw
E:\Temp> cat t.pl print "'$_'\n" for @ARGV;
E:\Temp> t a b c d e f g h j 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'j'
Я использовал практически все дистрибутивы ActiveState Perl с 2004 года. Этих параметров достаточно, чтобы заставить его работать.
Хммм ... похоже, что файловая ассоциация для * .pl как-то испорчена. Я не использую Windows, поэтому я не могу это проверить. Вы можете проверить информацию о сопоставлении файлов с помощью команды ASSOC
или FTYPE
в командной строке. IIRC, « ASSOC .pl
» должен сообщить вам, что такое тип файла , а « FTYPE
filetype command » сообщает оболочке, что нужно делать с Perl-скриптом. Попробуйте что-нибудь вроде:
C:\> ASSOC .pl=perlscript
C:\> FTYPE perlscript=C:\Perl\bin\perl.exe %1 %*
Судя по виду одной из ссылок на команды , которая должна помочь. Я предполагаю, что текущая ассоциация не передает параметры скрипту. Вы можете проверить это с помощью ASSOC. pl
, чтобы выяснить, как называется ассоциация файлов, а затем с помощью FTYPE
распечатать команду, которую оболочка собирается выполнить.
Я обнаружил интересную вещь что хочу отметить для потомков. Я начал видеть именно эту проблему на машине друга при работе с некоторыми скриптами Python. ASSOC
и FTYPE
привели к ожидаемому результату, но параметры все еще не передавались - в точности то, что сообщалось изначально .
После небольшого рытья, Я обнаружил, что параметры реестра были созданы где-то вдоль строки как значения REG_SZ
. Я удалил их и заново создал, используя ASSOC
и FTYPE
, и все начало работать ...