我有两个相互冲突的程序。其中一个是由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的想法或解决方案将不胜感激。
答案 0 :(得分:0)
找到另一个使用的解决方案。我没有使用proccess.CloseMainWindow(),而是创建了一个包含以下内容的批处理文件:
taskkill /F /IM Program2.exe
然后从任务计划程序中运行该批处理文件。
奇怪的是,我需要在bat文件中的taskkill命令之前添加一个空行。没有它,我得到一堆乱码,它说它不知道如何运行该命令。几乎就像在taskkill命令之前插入了垃圾一样。很奇怪......