gpt4 book ai didi

c# - 从 Visual Studio 打开的 CMD 提示不会在我的计算机上启动 exe。为什么不?

转载 作者:太空狗 更新时间:2023-10-30 01:35:36 25 4
gpt4 key购买 nike

我有下面的代码来启动 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();
}

问题是我不断收到错误消息“StandardIn 尚未重定向。”从 Visual Studio 中,当我尝试在启动的命令窗口中键入 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();
}

最佳答案

此行将导致 “StandardIn has not been redirected.” 错误,因为您正在尝试写入 stdin 并且该句柄没有正确设置输入:

cmd.StandardInput.WriteLine("Putty.exe " + ((string)((Button)sender).Tag));

关于这个问题:

Is there a reason the CMD opened from Visual Studio isn't using my Environment Path?

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

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

您可以通过启动命令行提示符、从该命令行提示符运行 Visual Studio 然后创建您的子 cmd 进程来对此进行测试。

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

关于c# - 从 Visual Studio 打开的 CMD 提示不会在我的计算机上启动 exe。为什么不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com