【问题标题】:Run more than one instance of console application using .bat file使用 .bat 文件运行多个控制台应用程序实例
【发布时间】:2012-09-06 08:16:39
【问题描述】:

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

此应用程序会将一些文件从一个文件夹移动到另一个应用程序,并且 在数据库中创建一个条目。

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

如果一个 .exe 运行并在 10 分钟后启动相同 .exe 的另一个实例,会有什么问题吗?

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

【问题讨论】:

  • 你为什么不试试会发生什么? ;)
  • 除非应用访问相同的资源,否则多次运行应用应该不会出现问题。
  • 对 Johnny 评论的补充:某些资源,例如数据库,可能设计用于多个并发访问,而其他资源,例如您正在移动的文件,可能无法同时访问。
  • 我们不知道它是否会起作用。这完全取决于您的代码的细节。它可以写成不会有任何问题的方式,可以写成可能出现问题但不太可能出现的方式,或者可以写成很有可能出现问题的方式。跨度>

标签: c# batch-file


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以尝试各种方法。

    也许,如果前一个实例正在运行,则查询正在运行的进程并退出。

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

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,我所做的是编写一个快速控制台应用程序,作为应用程序的界面。

      在主循环中,我编写了代码来获取计算机上运行的进程并检查实例是否已经启动。如果没有,我启动了我的可执行文件。

      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);
                  }
              }
          } 
      }
      

      可能不是最好的解决方案,但它很快并且可以满足我的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-10
        • 2011-05-03
        • 1970-01-01
        • 2012-11-12
        • 2011-01-22
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多