Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言中的参数运行DOS命令#_C#_Windows_Processstartinfo - Fatal编程技术网

C# 用C语言中的参数运行DOS命令#

C# 用C语言中的参数运行DOS命令#,c#,windows,processstartinfo,C#,Windows,Processstartinfo,如果我在命令窗口中运行此命令,它将正常运行,并给出预期的结果。我首先通过CD FilePath进入文件路径。然后运行带有标志的命令,并将输出发送到DestPath C:\ProgramFiles(x86)\ProgramName\FileName.exe-f>C:\Temp\Test.txt 但是,它不是通过以下进程运行的。我已经通过了很多论坛并尝试了解决方案,但都没有成功 public const string FilePath=@“C:\\Program Files(x86)\\Progr

如果我在命令窗口中运行此命令,它将正常运行,并给出预期的结果。我首先通过
CD FilePath
进入文件路径。然后运行带有标志的命令,并将输出发送到DestPath

C:\ProgramFiles(x86)\ProgramName\FileName.exe-f>C:\Temp\Test.txt
但是,它不是通过以下进程运行的。我已经通过了很多论坛并尝试了解决方案,但都没有成功

public const string FilePath=@“C:\\Program Files(x86)\\ProgramName\\FileName.exe”;
公共常量字符串DestPath=@“C:\\Temp\\Test.txt”;
公共静态void GetResults()
{
ProcessStartInfo进程=新进程StartInfo
{
UseShellExecute=true,
CreateNoWindow=false,
FileName=@“cmd”,
};
string命令=@/c“+FilePath+”-f>“+DestPath;
process.Arguments=命令;
process.WindowStyle=ProcessWindowStyle.Hidden;
进程。启动(进程);
《睡眠》(2000年);

关于如何纠正此问题或我可能做得不正确,有什么建议吗?

因此,最终,我认为您的问题是试图启动命令提示符并让它执行输出重定向。老实说,我不确定这是否受支持,这不是一个C#问题。如果您真的想这样做,我建议编写一个small批处理文件(或者可能是powershell脚本),它执行您想要的操作并获取您需要的参数…可能只是输出文件名,然后直接启动

也就是说,请允许我建议您改用process类中内置的输出重定向:


然后,您可以将输出直接读取到程序中,并对其执行任何操作…这可能只是将其写入一个文件中…但我强烈怀疑您确实希望对其进行内部操作,并且无论如何都不需要将其写入一个文件中(因为您正在将其写入临时文件夹).

您的路径可以包含空格(在上面的示例代码中,FilePath已经包含空格)。因此,请确保在命令字符串中的路径周围加上引号,否则传递给cmd.exe的命令行参数会崩溃(由于包含空格的非引号路径参数)。(旁注:当您使用逐字字符串文本时,为什么要避开反斜杠?)放置cmd.exe所在位置的完整路径:FileName=@“cmd”,提示:为了让您自己更容易进行故障排除,首先尝试使用与控制台中代码的命令字符串中完全相同的参数运行/模拟对cmd.exe的调用。(比如,在控制台中键入:
cmd/c
…后跟命令字符串的内容)这是我们内部开发的程序,在外部不可用。我搜索了更多信息,找到了此页面。“”。这正是我需要的。但当我以这种方式运行时,它会显示“c:\program”不是内部程序。我想它无法解析完整路径。我想转到:cd C:\program Files(x86)\ProgramPath然后运行命令,将结果放入C:\Temp\Test.txt:\retrieve-f>C:\Temp\Test.txt以下是可以工作但不输出到文件的代码…\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu{UseShellExecute=false,CreateNoWindow=false,FileName=@“C:\Program Files(x86)\ProgramName\Command.exe”,};string RunCommand=@”/C:\Program Files(x86)\ProgramName\Command.exe-f>C:\Temp\Test.txt;Process.Arguments=RunCommand;Process.Start(Process);Console.WriteLine(RunCommand);Console.ReadLine();等等。感谢您的输入。我通过下面的过程了解到了这一点,它正按照我的需要正常工作。唯一的问题是,尽管我已经将其描述为“CreateNoWindows=True”,控制台窗口仍然闪烁。public const string output=“C:\Temp\Test.txt”;Process p=new Process();p.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;p=Process.Start(Process);p.StandardInput.WriteLine(@“cd”+文件路径);p.StandardInput.WriteLine(@“Retrieve-f>”+输出);p.StandardInput.WriteLine(@“EXIT”);string output=p.StandardOutput.ReadToEnd();string error=p.StandardError.ReadToEnd();有没有使用上述固定代码不刷新控制台的解决方案?如果我设置“UseShellExecute=True”,则“RedirectStandardOutput”会出错需要UseShellExecute为False。我被这篇文章困住了,没有解决方案。