【发布时间】:2022-01-21 18:54:21
【问题描述】:
我有一个需要管理多个进程的控制台应用程序。通过管理,我的意思是如果一个进程退出,我想再次启动它。所以基本上我的主进程将一直运行并观察进程 1 或 2 是否退出,如果退出则重新启动它们。
使用以下代码,程序会立即退出,出现 0 个错误。
static void Main() {
Task.Run(() => Process1());
Task.Run(() => Process2());
}
private static void Process1() {
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "a process 1 file path";
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
try {
using (Process exeProcess = Process.Start(startInfo)) {
exeProcess.WaitForExit();
}
Process1();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
private static void Process2() {
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "a process2 file path";
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
try {
using (Process exeProcess = Process.Start(startInfo)) {
exeProcess.WaitForExit();
}
Process2();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
【问题讨论】:
-
您发布的代码有什么问题?
-
@Theodor Zoulias 它只是立即退出主程序
-
您可以使用 Windows 作业 pinvoke 并创建它们来执行此操作,example
-
@nna12 我觉得我应该能够像我在示例中那样做。我只是缺少一些基本的东西。
-
为什么不直接用一些东西把你的 exe 包装成设备,然后让 windows 设备管理器监视它们并重新启动它们。如果您有要观看的 exe 的代码,请将它们升级为服务
标签: c# multithreading