【问题标题】:write command to command prompt open via executing bash file通过执行 bash 文件将命令写入命令​​提示符打开
【发布时间】:2017-06-12 06:26:07
【问题描述】:

我正在开发 Visual Studio 插件。作为其中的一部分,我想执行一个 bash 文件。此 bash 文件打开命令提示符。 打开命令提示符后,我们想在其上编写/执行一堆命令。

我试过这样:

System.Diagnostics.Process process = System.Diagnostics.Process.Start("MyBash.bat");
process.WaitForExit(5000);
process.StandardInput.WriteLine("echo %PATH%");

但是我可以看到,它打开了命令提示符但无法在其上写入命令。 它在向其写入命令的行抛出异常。似乎从此 bash 文件打开的命令提示符具有不同的进程 ID。

请帮我解决。

【问题讨论】:

    标签: c# plugins visual-studio-2015 vsix


    【解决方案1】:

    尝试直接在你的批处理文件中执行:

    将此插入您的批次:

    启动 cmd.exe /k "echo %PATH%"

    你也可以使用

    /c

    如果你想在执行后关闭 cmd

    编辑:

        Process p = new Process();
        ProcessStartInfo info = new ProcessStartInfo();
        info.RedirectStandardInput = true;
        info.UseShellExecute = false;
        info.FileName = "mybash.bat";
    
    
        p.StartInfo = info;
        p.Start();
    
        using (StreamWriter sw = p.StandardInput)
        {
            if (sw.BaseStream.CanWrite)
            {
                sw.WriteLine("mysql -u root -p");
                sw.WriteLine("mypassword");
                sw.WriteLine("use mydb;");
            }
        }
    

    【讨论】:

    • 由于我们的要求,我无法编辑批处理文件。批处理文件打开命令提示符,我们只是不想打印PATH变量螺母需要执行多个命令。
    • 我编辑了我的答案,您可以尝试使用 StreamWriter 来获取结果
    • 不幸的是不是。我在写行之前添加了睡眠时间,但它仍然不起作用。
    • 是的,我明白了。问题是您通过 .bat 文件执行 cmd。如果你以info.FileName = "cmd.exe"; 运行它,它会工作
    • 是的,你是对的。但由于我需要执行批处理文件,不知道如何让这个批处理文件打开进程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2021-01-31
    相关资源
    最近更新 更多