0

C# で記述されたコンソール アプリケーションを実行するバッチ ファイルが 1 つあります。

このアプリケーションは、いくつかのファイルをあるフォルダーから別のアプリケーションに移動し、データベースにエントリを作成します。

バッチ ファイルは、10 分ごとに実行されるようにスケジュールされています。

1 つの .exe が実行され、10 分後に同じ .exe の別のインスタンスが開始された場合、何か問題はありますか?

.exe の別のインスタンスが 10 分後に開始され、.exe の前のインスタンスがまだ実行されている場合はどうなりますか?

4

3 に答える 3

1

実行可能ファイルに単一のインスタンスのみを許可するように強制することをお勧めします。

ミューテックスを使用してC#で単一のインスタンスを実行する方法について質問がありました。回答に示されているリンクは 素晴らしいを示しています。

単一のインスタンスは、データベース/ファイルアクセスの例外を確実に防止します。10分ごとに実行される場合、別のインスタンスがすでに実行されているためキャンセルすることは悪い考えではないと思います。そうでない場合は、常に数分前に新しいインスタンスをスケジュールできます。

于 2012-09-05T14:12:51.043 に答える
1

あなたが試すことができる様々なことがあります。

おそらく、実行中のプロセスにクエリを実行し、前のインスタンスが実行されている場合は終了します。

または、ファイルがファイルコピープログラム内で使用されているかどうかを確認することもできます(ファイルウォッチャーで使用される一般的な方法)。

于 2012-09-05T14:13:14.927 に答える
1

私は同様の問題を抱えていました。私がしたことは、アプリのインターフェイスとして機能する簡単なコンソール アプリを作成することでした。

メイン ループ内で、コンピューター上で実行されているプロセスを取得するコードを記述し、インスタンスが既に起動されているかどうかを確認しました。そうでない場合は、実行可能ファイルを起動しました。

Process[] iProcesslist = Process.GetProcesses();
foreach (Process process in iProcesslist)
{
    if (process.ProcessName == "programName")
    {
        Log.Debug("ProgramName is currently running. Please wait for it to exit before launching again");
        return 0;
    } 
    else
    {
        using (var p = new Process())
        {
            try
            {
                p.StartInfo.FileName = @"C:\Users\username\Documents\Programming_Projects\programName\ProgramName\bin\Debug\programName.exe";
                p.Start();
                p.WaitForExit();
            }
            catch (Exception ex)
            {
                Log.Debug(ex.Message);
            }
        }
    } 
}

最善の解決策ではないかもしれませんが、迅速で、私が望むことを行います.

于 2012-09-05T14:19:08.167 に答える