【问题标题】:Why can't Perl launch telnet under Windows?为什么 Perl 在 Windows 下不能启动 telnet?
【发布时间】:2010-12-26 09:01:16
【问题描述】:

我在 Windows 2008 上启用了 telnet 客户端功能,并尝试从 Perl 脚本启动它:

perl -e "system('c:\windows\system32\telnet localhost')"

然后我收到这样的错误:

'c:\windows\system32\telnet' is not recognized as an internal or external command,
operable program or batch file.

我可以从“cmd”终端运行它,或者,如果我将 telnet.exe 复制到本地目录,它可以启动。我检查了c:\windows\system32下telnet.exe的权限,没有特别发现。

有人可以帮我处理这个案子吗?非常感谢!

【问题讨论】:

    标签: windows perl telnet


    【解决方案1】:

    我最近遇到了完全相同的问题,尝试以编程方式启动 telnet 和 rdp 客户端。该问题与称为文件系统重定向的 Windows“设计”的一个方面有关:

    “Windows 64 位 (WOW64) 上的 Windows 提供文件系统重定向。在 64 位版本的 Windows Server 2003 或 Windows XP 中,%WinDir%\System32 文件夹为 64 位应用程序保留。当32 位应用程序尝试访问 System32 文件夹,访问被重定向到以下文件夹:%WinDir%\SysWOW64。默认情况下,文件系统重定向已启用。"

    http://www.codeproject.com/tips/55290/Disabling-Windows-file-system-redirection-on-a-CFi.aspx

    【讨论】:

      【解决方案2】:

      我认为你必须指定程序的全名,即telnet.exe。但是你最好使用 Net::Telnet 模块或类似 Expect.pm 的东西,它以编程方式处理交互式会话。

      【讨论】:

      • 我也试过telnet.exe,也没用。我正在做的是显示一个 telnet 控制台(如连接到 BBS),Net::Telnet 是否为我处理屏幕渲染?
      • @yongsun:不,您必须自己处理丝网印刷。至于perl -e "system('c:\windows\system32\telnet.exe localhost')",它在我的系统上运行良好(XP Pro)
      【解决方案3】:

      您好,您使用的是 Perl,所以我想知道您为什么不使用 Net::Telnet,而不是 windows 的 telnet.exe,因为 AFAIK 对编程不友好。

      【讨论】:

        【解决方案4】:

        在我的计算机上,以下代码有效(Windows 7):

        $telnet = $ENV{'WINDIR'} . '\system32\telnet.exe';
        system("$telnet 192.168.1.1");
        

        【讨论】:

        • 奇怪,Windows 2008 和 Windows 7 应该有类似的环境。如果你运行perl -e "print -r $ENV{'WINDIR'} . '\system32\telnet.exe'"会打印什么?
        【解决方案5】:

        必须是 a) 权限 b) 路径错误 c) 最后需要 .exe 或 d) 您需要将“c:”大写

        【讨论】:

          【解决方案6】:

          您可能想要验证 Perl 在哪个帐户下执行并检查该帐户是否具有运行 telnet 等可执行文件的权限。

          只是为了验证理论,我会在高权限帐户(如管理员)下运行 Perl,以检查它是否运行 telnet,然后调整运行它的帐户。

          希望这会有所帮助!

          【讨论】:

          • 我以管理员身份从命令控制台运行 perl 可执行文件,我可以从中成功启动 telnet.exe。而 Windows XP 没有这个问题。
          • 那么,如果你在 cmd 中以管理员身份运行 perl,它可以工作吗?然后我的猜测是检查那个 Win2008 盒子上的组策略。 (不确定哪种类型的策略可能会禁止 perl 运行)
          • 对不起,我的意思是从 cmd 控制台,我可以直接启动 telnet.exe,但无法从 perl 启动它(在同一个控制台上)。
          • 你能从 cmd 启动 Perl 吗? (另一方面,如果您使用 ActivePerl,您应该使用 5.8.8 或 5.10.0 版本 - 它们是针对 Win2008 进行测试的)
          【解决方案7】:

          了解console host

          ConHost 代表控制台应用程序 I/O 处理方式的永久性变化。

          另见related post on SysInternals forums

          我现在无法访问任何 Windows Server 2008 机器,所以我无法对此进行测试,但是您能否检查一下当您从 Start -> Run 的等效项运行 wperl -e "system('c:\windows\system32\telnet localhost')" 时会发生什么在那个操作系统上。

          【讨论】:

          • 感谢您的信息,我尝试从“start->Run”启动 wperl -e "system('c:\windows\system32\telnet localhost')",仍然失败。
          【解决方案8】:

          答案是:用sysnative代替system32,因为不允许32位应用访问system32目录(64位应用)。通过使用这个别名 sysnative 它可以工作。

          【讨论】:

            猜你喜欢
            • 2010-11-09
            • 1970-01-01
            • 1970-01-01
            • 2010-10-28
            • 2021-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-05
            相关资源
            最近更新 更多