从 C# 中的 Process.Start 启动 cmd.exe 时,无法识别 Telnet 命令

德布

我已经打开了控制面板上的 telnet 选项 - 程序/功能。虽然 telnet 手动工作正常,但是当我从我的 C# 库下面运行时,我收到此错误:

“'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件。”

这是我用来启动 Telnet 的代码:

Process.Start("cmd", "/k telnet")

这与手动从命令提示符运行它之间有什么区别,我该如何克服这种区别?

莫菲

通过控制面板 - 程序和功能 - 打开或关闭 Windows 功能安装Telnet 客户端,安装telnet.exe到目录中%SystemRoot%\System32

该目录%SystemRoot%\System32用于 64 位 Windows 上的 64 位应用程序。因此,安装的可执行文件telnet.exe也是 64 位版本。此目录还包含 64 位版本的cmd.exe.

系统环境变量PATH包含%SystemRoot%\System32负责查找%SystemRoot%\System32\cmd.exe%SystemRoot%\System32\telnet.exe执行时没有文件扩展名和路径。

但另外还有一个%SystemRoot%\SysWOW64包含 32 位版本可执行文件的 32 位应用程序目录

微软在文档页面WOW64 实现细节文件系统重定向器中解释%SystemRoot%\System32了 32 位应用程序对文件系统的访问如何自动重定向到%SystemRoot%\SysWOW64.

安装Telnet Client 时没有telnet.exe安装32 位版本%SystemRoot%\SysWOW64

那么会发生什么:

Process.Start("cmd", "/k telnet")

当 C# 库被编译为 64 位应用程序使用的 64 位库时,64 位 Windows 会查找并%SystemRoot%\System32\cmd.exe启动%SystemRoot%\System32\telnet.exe.

但是,当 C# 库被编译为 32 位应用程序使用的 32 位库时,64 位 Windows 会通过文件系统重定向器找到并启动,该文件系统重定向器在当前目录或任何目录中的环境变量PATHEXT%SystemRoot%\SysWOW64\cmd.exe找不到telnet.*列出的文件扩展名。环境变量PATH因为目录中没有文件telnet.exe%SystemRoot%\SysWOW64


最好的解决方案绝对是在 C# 库中使用静态(或动态)telnet 库来独立于Panagiotis Kanavos 的telnet.exe建议在我看来,对于通过进程调用使用外部可执行文件的每个 C# 程序员来说,这是一种耻辱,程序员也可以很容易地编写 C# 代码。使用带有搜索词的任何万维网搜索引擎都会返回大量带有解决方案的页面,例如Stack Overflow 上的C# Telnet 库C# telnet

当然,也可以使用GetEnvironmentVariable方法获取环境变量SystemRoot 的第一个值以获取 Windows 目录的路径,或者使用GetWindowsDirectoryGetSystemWindowsDirectory方法更好

然后将此字符串值与"\\System32\\telnet.exe"新字符串连接,并使用File.Exists方法检查具有该完整路径的文件是否存在如果该文件存在于安装了 32 位版本的 32 位 Windows 上(telnet.exe如果 C# 应用程序也是 32 位应用程序)或在telnet.exe安装了 64 位的 64 位 Windows 上(如果 C# 应用程序是 64 位应用程序),则此文件具有完整路径和文件扩展名的名称可用于进程调用。

否则将 Windows 目录路径与"\\Sysnative\\telnet.exe"并检查具有该完整路径的文件是否存在。如果在安装了 64 位版本的 64 位 Windows 上,telnet.exe如果 C# 应用程序是 32 位应用程序,则可以使用此路径从 32 位应用程序中运行 64 位 telnet 客户端可执行文件。

但是,如果这也失败了,telnet.exe则根本没有安装,这就是为什么telnet.exe通常不建议在 C# 代码应用程序中使用from的原因

老实说,我不明白为什么在 C# 库中有代码,它只启动一个命令进程执行telnet.exe而没有选项,因此需要用户输入,并在 telnet 客户端会话终止后保持命令进程运行。C# 库函数可以替换为telnet.exeWindows 桌面或用户 Windows 开始菜单中的快捷方式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

终端进程命令“ C:\ Windows \ System32 \ cmd.exe”无法启动(退出代码:2)

来自分类Dev

使用 Ant 通过 cmd.exe“start”命令启动 Java 程序

来自分类Dev

Git for Windows中的Bash:使用带有args的CMD.exe / C运行命令时很奇怪

来自分类Dev

Git for Windows中的Bash:使用带有args的CMD.exe / C运行命令时很奇怪

来自分类Dev

从C#程序在CMD.EXE中运行多个命令?

来自分类Dev

在启动cmd中插入命令

来自分类Dev

使用-Verb RunAs通过Start-Process运行cmd.exe,然后以管理员身份自动运行命令

来自分类Dev

在IIS中运行时,Process.Start cmd.exe不会运行作为参数传递的cmd文件

来自分类Dev

使用C#Windows窗体通过CMD执行telnet命令

来自分类Dev

在cmd.exe中退出当前命令

来自分类Dev

通过cmd.exe / C调用时,有效的cmd命令无法正确执行

来自分类Dev

在 CMD 启动命令中禁用弹出消息

来自分类Dev

为什么不能从Windows 8命令提示符下启动telnet.exe?

来自分类Dev

C#中的cmd命令

来自分类Dev

在Azure网站中启动Process.Start

来自分类Dev

Process.Start()的exe无法正常工作

来自分类Dev

在Windows 10中取消cmd.exe中的连续命令

来自分类Dev

某些 CMD 命令无法识别

来自分类Dev

Telnet无法从Windows 7中的cmd提示符运行

来自分类Dev

使用PowerShell在cmd.exe中运行命令

来自分类Dev

从 VBScript 中的 cmd.exe 命令获取完整输出

来自分类Dev

c#打开cmd.exe进程并执行多个命令

来自分类Dev

多次运行“ start cmd / c”时,暂停命令运行不正常

来自分类Dev

启动ConEmu时设置cmd.exe参数

来自分类Dev

C ++无法识别DLL中的命令

来自分类Dev

如何在CMD中对多个命令使用启动

来自分类Dev

golang处理由cmd.Start启动的进程中的kill

来自分类Dev

cmd运行exe无法在Python中运行

来自分类Dev

如何启动cmd.exe以使用Task Scheduler执行命令?

Related 相关文章

  1. 1

    终端进程命令“ C:\ Windows \ System32 \ cmd.exe”无法启动(退出代码:2)

  2. 2

    使用 Ant 通过 cmd.exe“start”命令启动 Java 程序

  3. 3

    Git for Windows中的Bash:使用带有args的CMD.exe / C运行命令时很奇怪

  4. 4

    Git for Windows中的Bash:使用带有args的CMD.exe / C运行命令时很奇怪

  5. 5

    从C#程序在CMD.EXE中运行多个命令?

  6. 6

    在启动cmd中插入命令

  7. 7

    使用-Verb RunAs通过Start-Process运行cmd.exe,然后以管理员身份自动运行命令

  8. 8

    在IIS中运行时,Process.Start cmd.exe不会运行作为参数传递的cmd文件

  9. 9

    使用C#Windows窗体通过CMD执行telnet命令

  10. 10

    在cmd.exe中退出当前命令

  11. 11

    通过cmd.exe / C调用时,有效的cmd命令无法正确执行

  12. 12

    在 CMD 启动命令中禁用弹出消息

  13. 13

    为什么不能从Windows 8命令提示符下启动telnet.exe?

  14. 14

    C#中的cmd命令

  15. 15

    在Azure网站中启动Process.Start

  16. 16

    Process.Start()的exe无法正常工作

  17. 17

    在Windows 10中取消cmd.exe中的连续命令

  18. 18

    某些 CMD 命令无法识别

  19. 19

    Telnet无法从Windows 7中的cmd提示符运行

  20. 20

    使用PowerShell在cmd.exe中运行命令

  21. 21

    从 VBScript 中的 cmd.exe 命令获取完整输出

  22. 22

    c#打开cmd.exe进程并执行多个命令

  23. 23

    多次运行“ start cmd / c”时,暂停命令运行不正常

  24. 24

    启动ConEmu时设置cmd.exe参数

  25. 25

    C ++无法识别DLL中的命令

  26. 26

    如何在CMD中对多个命令使用启动

  27. 27

    golang处理由cmd.Start启动的进程中的kill

  28. 28

    cmd运行exe无法在Python中运行

  29. 29

    如何启动cmd.exe以使用Task Scheduler执行命令?

热门标签

归档