安装并连接到 Telnet [控制台应用程序]

Install and connect to Telnet [Console Application]

因为我完成了我的学校项目并且现在没有任何东西了,所以我开始在我的小控制台应用程序中实现 Easteregg。它应该安装 telnet (pkgmgr /iu:"TelnetClient") 并调用 StarWars 动画:"telnet" + "o" + "towel.blinkenlights.nl"

为此,我的应用程序打开了一个 CMD 提示符,它安装了 Telnet:

public static void EastereggInstall()
    {
        Process cmd = new Process();

        cmd.StartInfo.FileName = "cmd.exe";
        cmd.StartInfo.RedirectStandardInput = true;
        cmd.StartInfo.RedirectStandardOutput = true;
        cmd.StartInfo.CreateNoWindow = true;
        cmd.StartInfo.UseShellExecute = false;

        cmd.Start();

        cmd.StandardInput.WriteLine("pkgmgr /iu:'TelnetClient'");
        cmd.StandardInput.Flush();
        cmd.StandardInput.Close();
        Console.WriteLine(cmd.StandardOutput.ReadToEnd());
        Environment.Exit(0);
    }

任务完成后 Environment.Exit(0); 它调用另一个 CMD 提示连接到启动动画的 telnet 服务器:

public static void EastereggPlay()
    {
        Process cmd = new Process();

        cmd.StartInfo.FileName = "cmd.exe";
        cmd.StartInfo.RedirectStandardInput = true;
        cmd.StartInfo.RedirectStandardOutput = true;
        cmd.StartInfo.CreateNoWindow = true;
        cmd.StartInfo.UseShellExecute = false;

        cmd.Start();

        cmd.StandardInput.WriteLine("telnet" + "o" + "towel.blinkenlights.nl");
        cmd.StandardInput.Flush();
        cmd.StandardInput.Close();
        Console.WriteLine(cmd.StandardOutput.ReadToEnd());
    }

但是,第一个命令提示符自行关闭,没有任何错误消息。 我也尝试使用 Console.ReadKey() 来获取错误,但仍然没有有用的信息。我的第一个想法是 cmd.StandardInput.WriteLine("telnet" + "o" + "towel.blinkenlights.nl"); 不能在一行中使用它来执行,所以我尝试了

cmd.StandardInput.WriteLine("telnet");
cmd.StandardInput.WriteLine("o");
cmd.StandardInput.WriteLine("towel.blinkenlights.nl");

仍然没有成功。那么你们知道我应该怎么做才能让这段代码工作吗?谢谢!

Environment.Exit(0) 关闭整个环境。

您应该只关闭进程,这样代码才能到达 telnet 连接。

使用

ProcessStartInfo startInfo = new ProcessStartInfo("cmd");
startInfo.WindowStyle = ProcessWindowStyle.Normal;

startInfo.Arguments = "/c telnet o towel.blinkenlights.nl";
Process.Start(startInfo);

确保该命令有效,否则 cmd 进程将退出。

为确保一切正常,请尝试

startInfo.Arguments = "/c ping google.com -t";

此外,在测试时您应该考虑将 CreateNoWindow 设置为 false