使用.bat文件运行多个控制台应用程序实例

时间:2012-09-05 14:01:59

标签: c# batch-file

我有一个批处理文件,它运行用C#编写的控制台应用程序。

此应用程序会将一些文件从一个文件夹移动到另一个应用程序 在数据库中输入。

批处理文件计划每10分钟运行一次。

如果一个.exe runnig会在10分钟后启动另一个相同的.exe实例会有任何问题吗?

如果.exe的另一个实例在10分钟后启动而前一个.exe实例仍在运行,会发生什么?

3 个答案:

答案 0 :(得分:1)

我建议强制您的可执行文件只允许一个实例。

有一个关于how to run a single instance in C# with a mutex的问题 link中提供的answer显示了一个很好的例子。

单个实例会以任意方式阻止任何数据库/文件访问异常。如果它每十分钟运行一次我不认为取消它,因为另一个实例已经运行将是一个坏主意,如果不是,你可以总是提前几分钟安排一个新的。

答案 1 :(得分:1)

你可以尝试各种各样的事情。

或许,查询正在运行的进程并在先前的实例正在运行时退出。

或者,您可以检查文件复制程序中是否正在使用该文件(文件监视器中使用的典型方法)。

答案 2 :(得分: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);
            }
        }
    } 
}

可能不是最好的解决方案,但它很快就做了我想要的。