首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >process.start()参数

process.start()参数
EN

Stack Overflow用户
提问于 2010-07-17 03:00:58
回答 5查看 130K关注 0票数 44

当我在dos中执行以下命令时,它将正常工作

代码语言:javascript
复制
ffmpeg -f image2 -i frame%d.jpg -vcodec mpeg4 -b 800k video.avi

当我尝试使用c#中的process类时,如果不带参数,它会在控制台窗口中加载ffmpeg,然后像往常一样消失。但是,当我尝试像上面那样使用参数时,精确格式化的same...it不起作用!ffmpeg仍然加载,但是由于控制台窗口关闭得如此之快,我无法确定错误是什么:/

代码语言:javascript
复制
Process ffmpeg = new Process();
ffmpeg.StartInfo.FileName = path + "//" + "ffmpeg.exe";
ffmpeg.StartInfo.Arguments = " -f image2 -i frame%d.jpg -vcodec mpeg4 -b 800k video.avi";
ffmpeg.Start();

有人知道这是为什么吗?为什么该命令可以在dos中工作,而使用c#时却无法工作,即使参数完全相同?我以前在很多事情上都使用过这种方法,但从来没有遇到过这种情况。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-17 03:04:34

尝试完全限定参数中的文件名-我注意到您在FileName部件中指定了路径,因此进程可能在其他地方启动,然后找不到参数并导致错误。

如果这样做有效,那么在StartInfo上设置WorkingDirectory属性可能会有用。

实际上,根据链接

如果提供了UserName和

,则必须设置WorkingDirectory属性。如果未设置该属性,则默认工作目录为%SYSTEMROOT%\system32。

票数 33
EN

Stack Overflow用户

发布于 2010-07-17 03:35:08

这不是一个直接的答案,但我强烈建议对这种“探索性”C#编程使用LINQPad

我在LINQPad中保存了以下内容作为“查询”:

代码语言:javascript
复制
var p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c echo Foo && echo Bar";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardOutput.ReadToEnd().Dump();

您可以根据需要自由调整。

票数 44
EN

Stack Overflow用户

发布于 2010-07-17 03:16:44

确保使用完整路径,例如,不仅是"video.avi“,而且是该文件的完整路径。

调试的一个简单技巧是使用cmd /k <command>启动命令窗口:

代码语言:javascript
复制
string ffmpegPath = Path.Combine(path, "ffmpeg.exe");
string ffmpegParams = @"-f image2 -i frame%d.jpg -vcodec"
    + @" mpeg4 -b 800k C:\myFolder\video.avi"

Process ffmpeg = new Process();
ffmpeg.StartInfo.FileName = "cmd.exe";
ffmpeg.StartInfo.Arguments = "/k " + ffmpegPath + " " + ffmpegParams
ffmpeg.Start();

这将使命令窗口保持打开状态,以便您可以轻松地检查输出。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3268022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档