我在cmd的界面下,直接执行命令:
f:\Bepipe.exe --script "DirectShowSource(^f:\wav.avs^)" | f:\neroAacEnc.exe -bt 64 -if - -of "f:\outfile.mp4"
这个命令是可以正确的执行,bepipe命令行程序从wav.avs文件中读取,把数据喂给neroAacEnc.exe命令行程序,然后输出outfile.mp4
(这是调用neroaac编码器对音频编码的)但是我在gui程序中,
...
string bepipe = @"f:\BePipe.exe";
string bepipeArg = "--script \"DirectShowSource(^f:\\wav.avs^)\" | f:\\neroAacEnc.exe -br 64 -if - -of \"f:\\forthgui\\outfile.mp4\"";
Process.Start(bepipe, bepipeArg);
...
这样写,但执行起来时却跟在cmd下手动敲参数进去执行时完全不一样,执行总是失败...请问一下,在gui程序中应该怎么写那一串参数?

解决方案 »

  1.   

    把内容写一个串里string bepipe = @"f:\BePipe.exe--script \"DirectShowSource(^f:\\wav.avs^)\" | f:\\neroAacEnc.exe -br 64 -if - -of \"f:\\forthgui\\outfile.mp4\"";
    Process.Start(bepipe);
      

  2.   

    2#楼的方法,不行吧,至少我刚试了一下不行
    把文件名跟参数都写到一个字符串里,用Process.Start(string arg);执行。
    根本就不识别那个字符串,Process.Start(string arg)只认定arg是文件名路径,执行时因为后边的参数多余引起不能识别文件名路径,调试时提示异常:找不到文件我所问的那个字符串参数,主要是从中间那一个"|"符号开始,貌似那之后的参数都无效了,调试时那后边的参数都没有执行
      

  3.   

    string bepipe ="cmd.exe "; @"f:\BePipe.exe"; 
    string bepipeArg = @"/c f:\BePipe.exe--script \"DirectShowSource(^f:\\wav.avs^)\" | f:\\neroAacEnc.exe -br 64 -if - -of \"f:\\forthgui\\outfile.mp4\""; 
    Process.Start(bepipe, bepipeArg); 
      

  4.   

    string bepipe ="cmd.exe "; 
    string bepipeArg = @"/c  f:\BePipe.exe--script \"DirectShowSource(^f:\\wav.avs^)\" | f:\\neroAacEnc.exe -br 64 -if - -of \"f:\\forthgui\\outfile.mp4\""; 
    Process.Start(bepipe, bepipeArg); 
      

  5.   

    咳,你写的时候注意一下你的命令行字符串 @ 和 \ .确保命令行的串正确.
    有问题你可以用这个简单的测试一下.            string bepipe = "cmd.exe "; 
                string bepipeArg = @"/c dir c:\windows | more";
                Process.Start(bepipe, bepipeArg); 
      

  6.   

    用wdgphc的方法调用cmd.exe,再把后边的那些命令全作参数。
    果然行得通,绕开了直接用bepipe.exe启动的设置命令参数的问题。thanks wdgphc!我还想知道一点最开始我那么写的错误?
    错在哪里?
      

  7.   

    个人认为,你开始那么写,比如文件名是一个 txt文件或 bmp文件什么都可以打开, 而exe文件,dos命令行格式的,我一般都是用cmd模式.原理我也说不清.
      

  8.   

    反正用cmd执行的方法确实可行。
    虽然msdn上,按我那种方法写,在msdn上的用法简单来看,是没错的,不过我也不知道为何不行。