执行System.Diagnostics.Process cmd.exe只打开命令提示符,不执行参数

时间:2012-06-29 20:06:37

标签: c# command-line process command-line-arguments system.diagnostics

我在哪里错了?这就像参数甚至没有被执行,它只是打开命令提示符,就是这样。当您打开一个新的命令提示符时,“结果”(StandardOutput)正好显示出来....说Microsoft Windows [Version 6.1.7600] Copyright ... blah然后是命令提示符的起始路径。< / p>

无论如何,这是我的代码:

    private static void ExecuteProcess(string processFile, string processArguments)
    {
        ProcessStartInfo psi = new ProcessStartInfo(processFile, processArguments);
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        psi.UseShellExecute = false;
        //psi.CreateNoWindow = true;

        Process p = new Process();
        p.StartInfo = psi;

        try
        {
            Cursor.Current = Cursors.WaitCursor;

            p.Start();

            string output = p.StandardOutput.ReadToEnd();

            p.WaitForExit();

            Cursor.Current = Cursors.Default;

            if (p.ExitCode == 0)
                MessageBox.Show(output, "Results");
            else
                throw new Exception(p.StandardError.ReadToEnd());
        }
        catch (Exception ex)
        {
            Cursor.Current = Cursors.Default;
            MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            p.Dispose();
        }
    }

processFile等于“cmd.exe” processArguments等于:

csvde -s {servername} -f {filename} -d OU=MyOU,DC=dmz,DC=lan -r "(objectClass=organizationalUnit)" -n

关于为什么“论据”没有被执行的任何帮助都会很棒!

编辑:

到目前为止,我发现了一件事,克里斯关于权限的建议是真的,我需要设置:

psi.Verb = "runas";

但是在执行该过程时,看起来没有与该过程相关联的用户名,所以我也添加了这一行:

psi.UserName = Environment.UserName;

现在我收到“存根收到坏数据”......

2 个答案:

答案 0 :(得分:3)

来自the docs

  

<强> Cmd的

     

启动命令解释程序Cmd.exe的新实例。用过的   没有参数,cmd显示Windows XP版本和版权   信息。

     

语法cmd [[{/ c | / k}] [/ s] [/ q] [/ d] [{/ a | / u}] [/ t:fg]   [/ e:{on | off}] [/ f:{on | off}] [/ v:{on | off}] string]返回页首

     

<强>参数

     

/ c:执行string指定的命令然后执行   停止。

所以你需要:

  1. 将完整路径传递给EXE或
  2. Set the working directory到包含exe
  3. 的目录

    然后

    1. 制作processFile ==“[] csvde.exe”,并将其从processArguments
    2. 中删除
    3. Prepent“/ c \”“并将”\“”追加到processArguments

答案 1 :(得分:0)

我终于回过头来研究这个问题并想出如何让它发挥作用。

我必须专门设置Process.ProcessStartInfo的用户名,密码和域,以便进行处理。