从TaskScheduler运行时如何查找/关闭进程?

时间:2017-09-05 18:47:22

标签: c# .net process system.diagnostics taskscheduler

我有两个相互冲突的程序。其中一个是由Task Scheduler(Program1)在半夜启动的C#控制台应用程序,另一个(Program2)是一个C#WPF程序,通常由用户在白天运行。我尝试使用以下命令从Program1关闭Program2:

public static void CloseProgram2()
{
    var process = System.Diagnostics.Process.GetProcessesByName("Program2").FirstOrDefault();
    if (process != null)
    {
        if (process.CloseMainWindow())
        {
            SpinWait.SpinUntil(() => null == System.Diagnostics.Process.GetProcessesByName("Program2").FirstOrDefault(),
                TimeSpan.FromSeconds(30));
        }
    }
}

出于某种原因,从TaskScheduler运行Program1时,Program2不会关闭。但是,如果我手动运行Program1,它总是关闭Program2。我将任务调度程序设置为提供凭据,以便无论是否有人登录到计算机,Program1都将运行。我注意到Program1的输出窗口在从任务计划程序运行时不显示,但它确实成功运行。我想知道Task Scheduler是否正在以这样的方式运行Program1,它没有看到任务调度程序没有启动的进程,这也就是Program2没有关闭的原因。

任何可以帮助我在使用TaskScheduler运行Program1时从Program1关闭Program2的想法或解决方案将不胜感激。

1 个答案:

答案 0 :(得分:0)

找到另一个使用的解决方案。我没有使用proccess.CloseMainWindow(),而是创建了一个包含以下内容的批处理文件:

taskkill /F /IM Program2.exe

然后从任务计划程序中运行该批处理文件。

奇怪的是,我需要在bat文件中的taskkill命令之前添加一个空行。没有它,我得到一堆乱码,它说它不知道如何运行该命令。几乎就像在taskkill命令之前插入了垃圾一样。很奇怪......