cmd进程无法执行正确的命令

时间:2016-07-15 17:55:44

标签: c# http cmd

我正在开展一个你发送"的项目。 cmd.exe的命令并接收输出。对于此命令,您需要文件路径-k和url。 我有以下代码(名称和值已更改):

    string path = "C:\Users\program.exe"
    string pathcustom = "\"" + path + "\"";        //the path needs to be in quotation marks

    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;

    string Address = "1.2.3"

    string command = pathcustom + " " + "-k" + " " + "https://username:passwort@serveradress" + Address;        //Serveradress is the URL

    p.StartInfo.Arguments = "/C " + command;
    p.StartInfo.RedirectStandardOutput = true;
    p.Start();

    string ReturnValue = p.StandardOutput.ReadToEnd();

这段代码工作得很好,就像我想要的那样,但我需要另一种完全相似的方法,除了地址看起来不同。在上面的代码中它看起来像1.2.3但是在下面的方法中,地址必须看起来像这样(包括反斜杠和引号)\" ab:cd:de \"所以让我们假装这是

    string path = "C:\Users\program.exe"
    string pathcustom = "\"" + path + "\"";        

    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.UseShellExecute = false;

    string Address = @"\""ab:cd:de\""";

    string command = pathcustom + " " + "-k" + " " + "https://username:passwort@serveradress" + Address;        

    p.StartInfo.Arguments = "/C " + command;
    p.StartInfo.RedirectStandardOutput = true;
    p.Start();

    string ReturnValue = p.StandardOutput.ReadToEnd();

当我重写代码以便cmd保持打开时,使用第一种方法我得到了我想要/期望的输出。但是使用第二个不工作的方法,它将命令发送到cmd并执行它,但它写为" message"该命令写错了或无法找到。但是,当我使用完全相同的代码(通过streamwriter我将cmd的命令写入文本文件)并将其复制到cmd中时,它会像它应该的那样执行它。所以基本上,如果我通过c#执行命令,它就无法工作。请帮忙

2 个答案:

答案 0 :(得分:0)

您必须等待应用程序退出 使用像p.WaitForExit(毫秒)之类的东西 或者查看p.HasExited

答案 1 :(得分:0)

根据this MSDN Post,为了使StartInfo.Arguments中的参数保持引号,你需要“三重转义它”,如下所示:

string Address = "\\\"\"\"ab:cd:de\\\"\"\"; 
string command = pathcustom + " " + "-k" + "https://username:passwort@serveradress" + Address;