0

所以我有一个接近完成的程序。基本上我打算用它做的是使用 Windows 任务调度程序在很晚的某个时间调用它来自动转换,使用 HandBrake CLI 工具,我的同事转储到源文件夹中的一些文件。

我试图让我的程序在foreach循环中一次只转换一个程序,但是如果我使用process.WaitForExit();该程序在找到并转换第一个文件后无限期挂起。每当我调试我的程序cmd时,无论出于何种原因,我都会弹出 2 个弹出窗口……一个是cmd运行在 中找到的命令的实际提示,string command;另一个是debug/binMy Documents. 转换第一个文件后,运行命令和转换的实际命令窗口确实关闭,但是我后面有一个弹出窗口保持打开状态

file:///c:/users/cbruce/documents/visual studio 2012/Projects/auto_convert_handbrake/auto_convert_handbrake/bin/Debug/auto_convert_handbrake.exe

如果我删除process.WaitForExit();,那么我的程序将开始转换源文件夹中的每个文件,这没问题,但不太理想。这是我的代码。

namespace auto_convert_handbrake
{
    class Program
    {
        static void Main(string[] args)
        {

            string filesToBeConverted = @".*.avi";
            string outputFile;
            string convertedDestination = @"D:\ShareStream_Conversions\_finished_conversions\";
            var matches = Directory.GetFiles(@"D:\ShareStream_Conversions\_.to_be_converted\").Where(path => Regex.Match(path, filesToBeConverted).Success);

            foreach (string file in matches)
            {
                string cutPath = file.Replace(@"D:\ShareStream_Conversions\_.to_be_converted\", @"");
                outputFile = Regex.Replace(cutPath, ".avi", ".mp4");
                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";
                string command = @"start D:\ShareStream_Conversions\HandBrakeCLI -i " + file + " -o " + convertedDestination + outputFile;
                startInfo.Arguments = "/user:Administrator \"cmd /K " + command + "\"";
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
            }         
        }
    }
}

我希望程序一次只转换一个文件,并在移动到下一个之前自动退出其进程的当前实例match。感谢您的任何意见和建议。

4

1 回答 1

0

cmd /k ...将启动命令提示符,运行指定的命令,然后永远打开命令提示符(以接受新命令)。
因此,该进程将永远不会退出。

您应该直接运行命令,或使用cmd /c.

于 2013-08-08T15:06:23.213 回答