0

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

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

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

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

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

4

3 回答 3

1

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

有一个关于如何在 C# 中使用互斥锁运行单个实例的问题,答案中提供 的链接显示了一个很好的示例。

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

于 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 回答