Run exe in background on .NET platform

前两天写了个Bash脚本,用来将Flv格式转换为Avi格式。可是,并不是每个人的电脑上都有Linux/Unix环境,在将这些小工具拿给别的使用的时候,我还要提供一个Windows可以执行的工具。本来我是想将Bash转换为Windows批处理的,弄了一会也没有搞好,后来想了一下,干脆写个Console Application去后台调用ffmpeg工具来执行转换工作。

工具写好了,当我调用ffmpeg.exe这个小工具的时候,老是出现一个cmd窗口,非常不美观。后来网上找了一下,将执行ffmpeg的窗口隐藏起来,这个效果好多了。最近狂迷Command-Line和一些开源简洁的小工具,用这个方法,我就可以在我的应用程序中利用一些简洁实用的小工具了 :)

using System;

using System.Diagnostics;

using System.IO;

using System.Threading;



namespace convert_flv_2_avi

{

    class Program

    {

        static void Main(string[] args)

        {

            CheckFfmpegToolExist(Ffmpeg);

            MakeDestinationFolderExist(AviFolder);



            Console.WriteLine("Starting convert, please ensure flv files placed in folder of flv-folder\n");

            ConvertFlv2Avi(FlvFolder);



            Console.WriteLine("\nCompleted,Press any key to exit.");

            Console.ReadKey();

        }



        private static void ConvertFlv2Avi(string flvFolder)

        {

            string[] flvFiles = Directory.GetFiles(flvFolder);

            foreach (string flv in flvFiles)

            {

                Console.WriteLine("Converting file of {0}", flv);

                RunFfmpeg(flv,

                    string.Format("{0}.avi", flv.Substring(0, flv.Length - 4)));

            }

        }



        private static void MakeDestinationFolderExist(string aviFolder)

        {

            if (!Directory.Exists(aviFolder))

            {

                Directory.CreateDirectory(aviFolder);

            }

        }



        private static void CheckFfmpegToolExist(string Ffmpeg)

        {

            if (!File.Exists(Ffmpeg))

            {

                Console.WriteLine("Can not find {0}", Ffmpeg);

                Console.ReadKey();

                Environment.Exit(1);

            }

        }



        static void RunFfmpeg(string flvFile, string aviFile)

        {



            Process ffmpeg = new Process();

            ffmpeg.StartInfo.FileName = Ffmpeg;

            ffmpeg.StartInfo.Arguments = 

                string.Format(@"-i {0} -r 25 -b 750k -y {1}", flvFile, aviFile.Replace(FlvFolder, AviFolder));

            ffmpeg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  //Run ffmpeg.exe in background

            try

            {

                ffmpeg.Start();

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }



        }





        private const string Ffmpeg = @"ffmpeg\ffmpeg.exe";

        private const string FlvFolder = @"flv-folder";

        private const string AviFolder = @"out-avi-folder";

    }

}

你可能感兴趣的:(background)