C# 从Visual Studio打开的CMD提示符赢得';t在我的计算机上启动exe。为什么不呢?

C# 从Visual Studio打开的CMD提示符赢得';t在我的计算机上启动exe。为什么不呢?,c#,cmd,visual-studio-2013,C#,Cmd,Visual Studio 2013,我有下面的代码来启动一个cmd提示符,然后从该cmd提示符启动putty.exe,并在末尾添加和IP地址 private void btnRouter_Click(Object sender, EventArgs e) { MessageBox.Show((string)((Button)sender).Tag); System.Diagnostics.Process cmd = new System.Diagnostics.Process(); cmd.StartInf

我有下面的代码来启动一个cmd提示符,然后从该cmd提示符启动putty.exe,并在末尾添加和IP地址

private void btnRouter_Click(Object sender, EventArgs e)
{
    MessageBox.Show((string)((Button)sender).Tag);
    System.Diagnostics.Process cmd = new System.Diagnostics.Process();
    cmd.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
    cmd.StartInfo.UseShellExecute = true;
    cmd.Start();
    cmd.StandardInput.WriteLine("Putty.exe " + ((string)((Button)sender).Tag));
    cmd.WaitForExit();
}
问题是我一直从Visual Studio中收到一个错误“StandardIn未被重定向”。当我尝试在启动的命令窗口中键入putty.exe时,我得到了 “'putty.exe'未被识别为内部或外部命令, 这真的很奇怪,因为如果我转到运行行,键入cmd,然后键入putty.exe,它会在我将putty应用程序的绝对文件夹路径添加到系统环境路径后立即打开

从Visual Studio打开的CMD没有使用我的环境路径有什么原因吗

仍然不知道为什么会发生这种情况,但是我回到了以前的一些代码,将putty.exe的副本放在我的调试文件夹中,这次它成功启动了

private void btnRouter_Click(Object sender, EventArgs e)
{
    MessageBox.Show((string)((Button)sender).Tag);
    System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.FileName = "Putty.exe ";
    startInfo.Arguments = ((string)((Button)sender).Tag);
    myProcess.StartInfo = startInfo;
    myProcess.Start();
}

使用runas命令


您可以运行dir吗?

此行将导致“StandardIn未被重定向”。错误,因为您正在尝试写入stdin,并且尚未正确设置该句柄以进行输入:

cmd.StandardInput.WriteLine("Putty.exe " + ((string)((Button)sender).Tag));
关于这个问题:

从Visual Studio打开的CMD没有使用我的环境路径有什么原因吗

当父进程启动子进程时,该子进程将继承其父进程的环境

换句话说,您正在启动的新cmd窗口将继承Visual Studio环境,但这并不意味着Visual Studio环境与命令提示符的环境相同

您可以通过启动命令行提示符,从该命令行提示符运行VisualStudio,然后创建子cmd进程来测试这一点


现在,您的cmd进程应该有一个与原始命令行匹配的环境,以及Visual Studio添加到其环境副本中的任何更改。

有时人们会将其Visual Studio设置为“以管理员身份打开”。在这种情况下,管理员帐户的path变量可能不包括putty文件夹。据我所知,它不是以管理员身份打开的。在第一个示例中,您启动“cmd.exe”,然后尝试将字符串输入其stdin,可能无法工作。在第二个示例中,您启动putty.exe,然后它就可以工作了。。。尝试像在第二个示例中一样启动putty.exe,并根据需要使用IP addr参数。使用了两种不同的方法。我尝试过在项目的调试文件夹中没有Putty实例的情况下启动Putty。在我将Putty的副本放入该文件夹之前,它根本不起作用。它甚至不看我的计算机的Path环境变量。你一直在谈论VisualStudio,这让我很困惑,但我不知道VisualStudio是如何参与到你的工作中的。您编写了一个启动CMD.exe的小C#程序。您的程序启动了CMD.exe,而不是Visual Studio。您说您从VisualStudio收到一条错误消息-不,您从程序收到一条错误消息。