using System.Collections.Generic; namespace SHH.ProcessLaunchers { /// /// 进程启动配置项 /// public class ProcessConfig { #region --- 身份标识 (Identity) --- // /// [核心变更] 唯一标识符 (Key) /// 用于管理器内部索引,不可重复。例如: "Streamer_01", "Streamer_02" /// public string Id { get; set; } = string.Empty; /// /// [核心变更] 通用显示名称 (Category/Type) /// 描述这是一类什么程序。例如: "VideoStreamingService" /// 多个实例可以拥有相同的 DisplayName。 /// public string DisplayName { get; set; } = string.Empty; /// /// 描述备注 (可选) /// 例如: "负责处理 192.168.1.10 的视频流" /// public string Description { get; set; } = string.Empty; #endregion #region --- 启动参数 (Launch Args) --- /// 可执行文件路径 (绝对路径或相对路径) public string ExePath { get; set; } = string.Empty; /// 启动参数字符串 (例如 "--id=1 --debug") public string Arguments { get; set; } = string.Empty; /// 工作目录 (默认为 Exe 所在目录) public string WorkingDirectory { get; set; } = string.Empty; #endregion #region --- 表现层配置 --- /// /// 是否显示程序窗口 /// True: 弹出控制台窗口或UI | False: 后台静默运行 (CreateNoWindow=true) /// public bool Visible { get; set; } = false; /// /// 是否接管标准输出/错误流 (RedirectStandardOutput) /// True: 启动器将捕获 Console.WriteLine 内容并通过日志接口转发。 /// 注意: 如果 Visible=true,建议设为 false,否则控制台窗口将是黑屏。 /// public bool EnableLogRedirect { get; set; } = true; #endregion #region --- 守护策略配置 --- /// 意外退出后的常规重启延迟 (毫秒),默认 3000ms public int RestartDelayMs { get; set; } = 3000; /// 连续失败阈值 (达到此次数后触发熔断),默认 3 次 public int MaxConsecutiveFailures { get; set; } = 3; /// 熔断冷却时长 (毫秒),默认 30分钟 (1800000ms) public int CircuitBreakerDelayMs { get; set; } = 30 * 60 * 1000; /// /// 稳定运行判定阈值 (毫秒) /// 如果进程存活时间超过此值,则视为启动成功,重置失败计数器。 /// public int StabilityThresholdMs { get; set; } = 60 * 1000; /// /// 自动重启间隔 (分钟)。0 表示不启用定时重启。 /// 用于防止内存碎片或长期运行的不稳定性。 /// public int AutoRestartIntervalMinutes { get; set; } = 0; #endregion #region --- 排序启动 --- /// /// [新增] 启动顺序权重 /// 数字越小越先启动 (0, 1, 2...) /// public int StartupOrder { get; set; } = 0; /// /// [新增] 启动后等待时长 (毫秒) /// 当前进程启动后,等待多久再启动下一个进程。用于防止瞬间 CPU 峰值或依赖等待。 /// public int PostStartupDelayMs { get; set; } = 3000; #endregion /// 资源哨兵列表 (内存监控、心跳监控等) public List Guards { get; set; } = new List(); } }