0

だから私は完成に近づいているプログラムを持っています。基本的に私が計画しているのは、Windows タスク スケジューラを使用して非常に深夜に特定の時間に呼び出し、HandBrake CLI ツールを使用して、同僚がソース フォルダーにダンプしたいくつかのファイルを自動変換することです。

foreachループ内で一度に 1 つのプログラムのみを変換するようにプログラムを取得しようとしていますが、プログラムを使用process.WaitForExit();すると、最初のファイルを見つけて変換した後、プログラムが無期限にハングします。プログラムをデバッグするたびにcmd、何らかの理由で 2 つのポップアップが表示されます。1 つは にcmdあるコマンドを実行している実際のプロンプトで、もう 1 つは のフォルダ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();
            }         
        }
    }
}

プログラムで一度に 1 つのファイルのみを変換し、そのプロセスの現在のインスタンスを自動的に終了してから、次のファイルに移動するようにしmatchます。ご意見やご提案をありがとうございます。

4

1 に答える 1

0

cmd /k ...コマンド プロンプトを起動し、指定されたコマンドを実行してから、コマンド プロンプトを永久に開いたままにします (新しいコマンドを受け入れるため)。
したがって、プロセスが終了することはありません。

コマンドを直接実行するか、cmd /c.

于 2013-08-08T15:06:23.213 に答える