C# 使用进程。从路径中的参数和空格开始

C# 使用进程。从路径中的参数和空格开始,c#,process.start,C#,Process.start,我见过类似的例子,但找不到与我的问题完全相同的东西 我需要从C#运行这样的命令: 我在运行时设置v2,因此我需要能够在调用Process.Start之前修改C#中的字符串。有人知道如何处理这个问题吗,因为我的参数之间有空格?试试这个 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.F

我见过类似的例子,但找不到与我的问题完全相同的东西

我需要从C#运行这样的命令:

我在运行时设置v2,因此我需要能够在调用Process.Start之前修改C#中的字符串。有人知道如何处理这个问题吗,因为我的参数之间有空格?

试试这个

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);
您可以使用该类来分隔参数、文件名、工作目录和参数,而无需担心空格

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参数的字符串,即使在使用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);

在这里,我在文件名周围添加了转义引号,这很有效。

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

i、 e.
“-setting0=arg0——子设置0=arg1”

因此,我提出以下建议:

        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "\"" + Prefs.CaptureLocation.FullName + "\"";
        psi.Arguments = String.Format("-setting0={0} --subsetting0={1}", "\"" + arg0 + "\"", "\"" + arg1+ "\"");
        Process.Start(psi);
用引号括住每个参数,而不是整个参数集。正如本文所指出的,所有这些都可以用一条线来完成

        Process.Start("\"" + filename + "\"", arguments here)

ProcessStartInfo
:传递给ProcessStartInfo.Filename或Process.Start(string,string)的路径中的空格不是问题。它只是一个解析字符串的程序,可能会被它弄糊涂,比如cmd。exe@HansPassantvlc.exe也会被文件名中的空格混淆。因此,我必须使用Steve的建议来制作Procees.Start为我工作。这非常完美,只是没有startInfo.Start()方法。我不得不像@Steve建议的那样使用Process.Start(startInfo)。感谢您的帮助。这也可以通过Process.Start(“Excel.exe”,“\”“+fileName+”\)在一行中完成;是的,但在这里我想强调添加引号,以避免初学者混淆
        Process.Start("\"" + filename + "\"", arguments here)