【发布时间】:2020-06-15 15:13:52
【问题描述】:
我正在尝试从 C# 程序运行 curl 命令。我的代码如下。当我运行下面的代码时,我得到一个找不到文件的异常。我希望能够做到这一点,但我不想使用批处理文件作为文件名的参数。这是因为我的 curl 命令的参数会根据 C# 代码中的其他条件而变化。我的变量 strCmdText 具有 curl 命令的参数(源文件和目标文件)。 Stackoverflow 上还有其他示例,但它们都使用了我试图避免的批处理文件。
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "C:\\Windows\\System32\\curl.exe";
p.StartInfo.Arguments = strCmdText;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
我将代码更改为以下内容:
System.Diagnostics.ProcessStartInfo p = new
System.Diagnostics.ProcessStartInfo();
p.UseShellExecute = true;
p.WorkingDirectory = "C:\\Windows\\System32\\";
p.FileName = "curl.exe";
p.ErrorDialog = true;
p.CreateNoWindow = true;
System.Diagnostics.Process.Start(p);
在 DOS 提示符下,此目录中确实存在 curl。但我仍然收到 curl not found 消息。 这里的路径一定很奇怪。但是,当我在其中设置断点并查看 Environment 类时,System32 在路径中。
【问题讨论】:
-
100 万美元的问题...您确定
C:\Windows\System32\curl.exe存在吗?那将是一个非常奇怪的地方...... -
如果您想发出 HTTP 请求,使用 HttpClient 并直接调用会快得多。你可以用
where curl找到curl在哪里 -
另外,虽然
curl可以做很多事情,但请考虑一下,如果您尝试做的事情也不能通过WebClient的简单应用来完成(.DownloadFile等) -
curl 在我机器上的那个位置。我认为找不到的文件与您的论点有关。
-
你能告诉我们
strCmdText的值吗?
标签: c# command-line