0

あなたが私を助けてくれることを願っています。これらの .bat ファイルを実行したい場合、ファイルが実行されていることがわかりますが、最初のファイル、2 番目のファイル、またはその他のファイルしか取得できません。バッチ ファイルに問題はありません。それらを1つずつ実行しようとしましたが、動作します。

 string str_Path = Server.MapPath(".") + "\\execute.bat";
 string str_PathN= Server.MapPath(".") +"\\executeN.bat";
 string str_PathHD = Server.MapPath(".") + "\\executeHD.bat";
 string str_PathFHD = Server.MapPath(".") + "\\executeFHD.bat";

 ProcessStartInfo processInfo = new ProcessStartInfo(str_Path);
 processInfo.UseShellExecute = false;
 Process batchProcess = new Process();
 batchProcess.StartInfo = processInfo;
 batchProcess.Start();
 Thread.Sleep(3000);

 ProcessStartInfo hd = new ProcessStartInfo(str_PathHD);
 hd.UseShellExecute = false;
 Process batchProcessHD = new Process();
 batchProcessHD.StartInfo = processInfo;
 batchProcessHD.Start();
 Thread.Sleep(3000);
 ...
4

3 に答える 3

2

なぜあなたはしないのですか

public static void runBatch( string path, int sleepTime = 3000 )
{
   ProcessStartInfo psi = new ProcessStartInfo( path );

   psi.UseShellExecute = false;

   Process proc = new Process();
   proc.StartInfo = psi;

   proc.Start();
   Thread.Sleep( sleepTime );
}


main()
{
    runBatch(Server.MapPath(".") + "\\execute.bat");
    runBatch(Server.MapPath(".") +"\\executeN.bat");
...
}

または runBatch のより良いバージョン:

public static void runBatch( string path )
{
   ProcessStartInfo psi = new ProcessStartInfo( path );

   psi.UseShellExecute = false;

   Process proc = new Process();
   proc.StartInfo = psi;

   proc.Start();
   proc.WaitForExit();
}
于 2012-06-26T09:42:27.597 に答える
1

次を使用して、そのコードを簡略化できます。

 public void ExecuteBatFiles(List<string> path, int time)
    {
        foreach(string location in path)
        {
            ProcessStartInfo processInfo = new ProcessStartInfo(location);
            processInfo.UseShellExecute = false;
            Process batchProcess = new Process();
            batchProcess.StartInfo = processInfo;
            batchProcess.Start();
            Thread.Sleep(time);
        }
    }

次々とオフにしたい場合。しかし、代わりbatchProcessHD.StartInfo = processInfoに割り当てる必要があるようです。hd

于 2012-06-26T09:45:00.347 に答える
1

あなたは明らかに C# の初心者ですが、苦境についての理解が限られているため、別の方法でそれを行うことができます。

すべての回答が、プロセスのセットアップ コードの同じブロックの繰り返しを回避していることに注目してください。

コピーして貼り付けた場所で、必要な編集をすべて行っていないという問題に遭遇し、鋭敏な目で見つける必要があるバグを導入しました。

プログラマーは、上記の問題を回避するためにコードを 1 回だけ書くように努めます。そのため、そのコードにバグがあり、後で修正されたことが判明した場合は、一度修正することでアプリ全体で問題が解決します。明らかに、同じことを何度も書く必要がないため、時間も節約できます。

この原則は DRY と呼ばれ、詳細についてはこちらをご覧ください。

http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

    private static void Run()
    {
        var processes = CreateBatchOfProcesses("execute.bat", "executeN.bat", "executeHD.bat", "executeFHD.bat");
        foreach (Process p in processes)
        {
            p.Start();
            p.WaitForExit();

            // Do other stuff with the process.
        }
    }

    private static List<Process> CreateBatchOfProcesses(params string[] paths)
    {
        var batch = new List<Process>(paths.Length);

        foreach (string path in paths)
        {
            string mappedPath = Server.MapPath(String.Concat(".\\", path));
            ProcessStartInfo info = new ProcessStartInfo(mappedPath);
            info.UseShellExecute = false;
            Process process = new Process();
            process.StartInfo = info;

            batch.Add(process);
        }

        return batch;
    }
于 2012-06-26T09:53:35.913 に答える