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

C# 执行System.Diagnostics.Process cmd.exe只会打开命令提示符,不会';不执行参数,c#,command-line,process,command-line-arguments,system.diagnostics,C#,Command Line,Process,Command Line Arguments,System.diagnostics,这件事我哪里做错了?就好像这些参数甚至没有被执行,它只是打开命令提示符,就这样。“结果”(StandardOutput)正是当您打开一个新的命令提示符时所显示的内容……Microsoft Windows[Version 6.1.7600]版权声明……然后是命令提示符的起始路径 不管怎样,下面是我的代码: private static void ExecuteProcess(string processFile, string processArguments) {

这件事我哪里做错了?就好像这些参数甚至没有被执行,它只是打开命令提示符,就这样。“结果”(StandardOutput)正是当您打开一个新的命令提示符时所显示的内容……Microsoft Windows[Version 6.1.7600]版权声明……然后是命令提示符的起始路径

不管怎样,下面是我的代码:

    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
任何关于为什么“参数”没有被执行的帮助都是非常好的

编辑:

到目前为止,我发现Chris关于权限的建议是正确的,我需要设置:

psi.Verb = "runas";
但在执行流程时,似乎没有与流程关联的用户名,因此我也添加了这一行:

psi.UserName = Environment.UserName;
现在,我从以下位置获取“存根收到了错误数据”…

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:执行字符串指定的命令,然后 停下来

因此,您需要:

  • 将完整路径传递给EXE或
  • 到包含exe的目录
  • 然后

  • 使
    processFile
    ==“[]csvde.exe”,并将其从
    processArguments
    中删除,或
  • 准备“/c\”并将“\”附加到
    processArguments

  • 我终于回到了这项工作中,并想出了如何让它发挥作用


    我必须专门设置进程的用户名、密码和域。ProcessStartInfo才能执行进程。

    选项1结果:错误,系统无法找到指定的文件。选项2结果:错误“csvde”未被识别为内部或外部命令、可操作程序或批处理文件。已编辑选项1。对于这两个选项,您需要将工作目录设置为包含“csvde.exe”的目录,或者将完整路径添加到exe。哇,我的机器出了问题。我通过浏览器导航到C:\Windows\System32,找到了csvde.exe,复制了文件名,粘贴了这段代码,消息框显示“否”。。。。如果(File.Exists(@“C:\Windows\System32\csvde.exe”))MessageBox.Show(“是”);else MessageBox.Show(“no”);这是一个权限问题。From,“如果在尝试确定指定文件是否存在时发生任何错误,Exists方法将返回false。这可能发生在引发异常的情况下,例如传递的文件名包含无效字符或太多字符,磁盘出现故障或丢失,或者调用方没有读取该文件的权限。”(emphasis mine)。如果要在System32中运行应用程序,则需要以管理员身份运行,这本身就是一个问题。不,您不是:-)您是管理员组的成员,但除非右键单击可执行文件并单击“以管理员身份运行”,否则您没有具有管理员凭据的用户令牌。我敢打赌,如果您导航到C:\Windows\System32\csvde.exe并双击csvde.exe,您将在UAP对话框运行之前看到它。