路径可以解决从C#启动.exe的问题?

时间:2014-02-04 18:14:00

标签: c# command-line path

由于存储.exe的路径不同,我无法从C#代码启动.exe。

以下是我启动命令行.exe

的方法
try
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = fijiCmdText;
    process.StartInfo = startInfo;
    process.Start();
    _processOn = true;
    process.WaitForExit();

    ret = 1;
}
catch (Exception ex)
{
    ret = 0;
}

基本上fijiCmdText是执行的命令行。

然而,问题是,fijiCmdText, 这样的事情会成功:

fijiCmdText = "/C D:\\fiji\\ImageJ-win64.exe -macro D:\\fiji\\macros\\FFTBatch.ijm C:\\Users\\myAccount\\Documents\\Untitled005\\ --headless"

但是这样的事情不会成功:

fijiCmdText = "/C C:\\Users\\myAccount\\Downloads\\fiji (1)\\ImageJ-win64.exe -macro D:\\fiji\\macros\\FFTBatch.ijm C:\\Users\\myAccount\\Documents\\Untitled005\\ --headless"

似乎.exe的位置很重要。所以我想知道,除了更改.exe的位置之外,我还能用C#代码来处理这个问题,使其处理不同路径更加灵活可靠吗?感谢。

编辑: 使用命令行都没有问题。

1 个答案:

答案 0 :(得分:3)

问题是第二个路径包含空格,但没有引号来区分它。试试这个:

fijiCmdText = "/C \"C:\\Users\\myAccount\\Downloads\\fiji (1)\\ImageJ-win64.exe\" -macro D:\\fiji\\macros\\FFTBatch.ijm C:\\Users\\myAccount\\Documents\\Untitled005\\ --headless"

如果使用例如字符串构建字符串,例如这样string.Format

fijiCmdText = string.Format("/C {0} -macro {1} {2} --headless",
                            path1, path2, path3);

然后你应该改变它以用引号包装所有路径,例如:

fijiCmdText = string.Format("/C \"{0}\" -macro \"{1}\" \"{2}\" --headless",
                            path1, path2, path3);