C# 执行System.Diagnostics.Process cmd.exe只会打开命令提示符,不会';不执行参数
这件事我哪里做错了?就好像这些参数甚至没有被执行,它只是打开命令提示符,就这样。“结果”(StandardOutput)正是当您打开一个新的命令提示符时所显示的内容……Microsoft Windows[Version 6.1.7600]版权声明……然后是命令提示符的起始路径 不管怎样,下面是我的代码: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) {
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:执行字符串指定的命令,然后
停下来
因此,您需要:
processFile
==“[]csvde.exe”,并将其从processArguments
中删除,或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对话框运行之前看到它。