40

I've seen similar examples, but can't find something exactly like my problem.

I need to run a command like this from C#:

C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe p1=hardCodedv1 p2=v2

I'm setting v2 at runtime, so I need to be able to modify the string in C# before calling Process.Start. Does anyone know how to handle this, since I have spaces between my parameters?

4

4 回答 4

42

即使您使用 ProcessStartInfo 类,如果您必须为参数添加空格,那么上述答案也无法解决问题。有一个简单的解决方案。只需在参数周围添加引号。就这样。

 string fileName = @"D:\Company Accounts\Auditing Sep-2014 Reports.xlsx";
 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
 startInfo.FileName = "Excel.exe";
 startInfo.Arguments = "\"" + fileName + "\"";
 System.Diagnostics.Process.Start(startInfo);

在这里,我在文件名周围添加了转义引号,它可以工作。

于 2015-01-12T20:30:15.727 回答
23

您可以使用ProcessStartInfo类来分隔您的参数、文件名、工作目录和参数,而无需担心空格

string fullPath = @"C:\FOLDER\folder with spaces\OTHER_FOLDER\executable.exe"
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Path.GetFileName(fullPath);
psi.WorkingDirectory = Path.GetDirectoryName(fullPath);
psi.Arguments = "p1=hardCodedv1 p2=" + MakeParameter();
Process.Start(psi);

其中 MakeParameter 是一个函数,它返回要用于 p2 参数的字符串

于 2013-06-26T13:32:59.273 回答
8

尝试这个

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName =  "\"C:\\FOLDER\\folder with   spaces\\OTHER_FOLDER\\executable.exe\"";
startInfo.Arguments = "p1=hardCodedv1 p2=v2";
Process.Start(startInfo);
于 2013-06-26T13:30:05.603 回答
4

在查看了提供的其他解决方案后,我遇到了一个问题,即我所有的各种论点都被捆绑到一个论点中。

IE"-setting0=arg0 --subsetting0=arg1"

所以我会提出以下建议:

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\"";
        psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\"");
        Process.Start(psi);

在每个参数周围加上引号,而不是在整个参数集周围。正如Red_Shadow所指出的,这一切都可以用单行来完成

        Process.Start("\"" + filename + "\"", arguments here)
于 2017-07-05T12:35:06.550 回答