首页 > 解决方案 > 将大字符串参数传递给外部应用程序

问题描述

我正在开发一个程序,该程序运行具有多个(大文本)参数的另一个应用程序。当我通过 cmd.exe 运行这个外部应用程序时,一切正常(也有多行流动文本作为参数)。

ttv.exe -I <root directory> -v vMale -i "large large text" -o test.pcm

但是当我尝试从我的程序中调用它时,我发现“大文本”参数对于这个调用来说太大了,因为字符串限制为 254 个字符?!?

这里调用进程的这部分代码:

string path = @"<path to exe>";
string arg1= @"-I <root directory>";
string arg2= @"-v vMale";
string arg3= @"-o test.pcm";
string arg4= @"-i """+ text+"";

commandline.StartInfo.UseShellExecute = false;
commandline.StartInfo.RedirectStandardInput = true;

commandline.StartInfo.WorkingDirectory = path;
commandline.StartInfo.FileName = Path.Combine(path, "ttv.exe");
commandline.StartInfo.Arguments = " " + arg1+ " " + arg2+ " " + arg3+ " " + arg4;

commandline.Start();

我尝试了几种使用commandline.StandardInput.Write(), .WriteLine(), 特殊引号字符的解决方案,\"但没有任何效果。我认为控制台会在字符串太长时自动截断我的字符串。这个问题还有其他解决方案吗?当有人可以提供帮助时会很棒。谢谢

标签: c#command-lineprocessarguments

解决方案


我不知道为什么,但我明白了。改变论点的顺序会带来成功:当我写 commandline.StartInfo.Arguments = " " + arg1+ " " + arg2+ " " + arg4+ " " +arg3;

var arg3 = @"-o test.pcm"; var arg4= "-i \"long long text\"";

它有效:-/引用的大文本不应该作为最后一个论点吗?对我来说没有意义...感谢您谈论 xD


推荐阅读