我需要显示Windows任务调度程序窗口,并等到用户关闭它后再继续主程序。
我试过这个方法:
public static bool RunCommand (string command)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Verb = "runas",
Arguments = "/C " + command,
UseShellExecute = false
};
Process process = new();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
return true;
}
catch (Exception)
{
return false;
throw;
}
}
我尝试传递以下命令作为参数"command">
显示任务计划程序- "taskschd.msc">
- "启动/等待任务调度。msc/s"
- "C: windows system32系统 taskschd。msc/s"
- "控制schedtasks"
这个想法是在Task Scheduler关闭(它的进程被杀死)时继续执行主程序,但是"process. waitforexit ();"指令链接到cmd命令,因此主程序在cmd进程关闭后继续运行,即使任务调度程序窗口仍在显示。
问题是"taskschd.msc"进程在启动时被打包到"svchost.exe"的过程。我不能确定它的PID,因为许多不同的svchost同时运行,所以我也不能手动杀死它。
我已经尝试了这里提出的解决办法,但都无济于事。
我也一直在寻找一种方法来给别名的"scvhost.exe"进程用这个命令启动,但似乎不可能。
我一直在考虑编译一个新的exe,只是为了在一个我可以控制的进程名下启动任务调度程序,但我不认为这是一个好的解决方案。
有什么想法吗?正在启动taskschd。MSC through mmc.exe works:
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = "mmc.exe",
Arguments = "taskschd.msc",
Verb = "runas",
UseShellExecute = true,
CreateNoWindow = true
};
var process = Process.Start(psi);
process.WaitForExit();