如何在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 talk),但我还没有找到一个有效的解决方案.
我也试过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是对的:它必须是一个"文件关联"问题;
在资源管理器上,右键单击.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" %*
其中%*是第一个参数之后的所有参数的宏.可能%*缺失.