mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-05 14:26:06 +02:00
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using NLog;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -20,6 +21,7 @@ namespace VRCX
|
|||||||
{
|
{
|
||||||
private readonly Dictionary<string, MonitoredProcess> monitoredProcesses;
|
private readonly Dictionary<string, MonitoredProcess> monitoredProcesses;
|
||||||
private readonly Timer monitorProcessTimer;
|
private readonly Timer monitorProcessTimer;
|
||||||
|
private readonly static Logger logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
static ProcessMonitor()
|
static ProcessMonitor()
|
||||||
{
|
{
|
||||||
@@ -75,6 +77,7 @@ namespace VRCX
|
|||||||
{
|
{
|
||||||
monitoredProcess.ProcessExited();
|
monitoredProcess.ProcessExited();
|
||||||
ProcessExited?.Invoke(monitoredProcess);
|
ProcessExited?.Invoke(monitoredProcess);
|
||||||
|
logger.Info($"Monitored process {monitoredProcess.ProcessName} (PID: {(monitoredProcess.Process?.Id.ToString() ?? "null")}) exited.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -91,11 +94,14 @@ namespace VRCX
|
|||||||
foreach (var monitoredProcess in processesNeedingUpdate)
|
foreach (var monitoredProcess in processesNeedingUpdate)
|
||||||
{
|
{
|
||||||
var process = processes.FirstOrDefault(p => string.Equals(p.ProcessName, monitoredProcess.ProcessName, StringComparison.OrdinalIgnoreCase));
|
var process = processes.FirstOrDefault(p => string.Equals(p.ProcessName, monitoredProcess.ProcessName, StringComparison.OrdinalIgnoreCase));
|
||||||
if (process == null)
|
|
||||||
|
// We are also checking to see if the process is exiting before adding it, otherwise we'll keep adding it and then removing it constantly in an endless loop.
|
||||||
|
if (process == null || WinApi.HasProcessExited(process.Id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
monitoredProcess.ProcessStarted(process);
|
monitoredProcess.ProcessStarted(process);
|
||||||
ProcessStarted?.Invoke(monitoredProcess);
|
ProcessStarted?.Invoke(monitoredProcess);
|
||||||
|
logger.Info($"Monitored process {monitoredProcess.ProcessName} (PID: {process.Id}) started.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,6 +135,7 @@ namespace VRCX
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
monitoredProcesses.Add(processName, new MonitoredProcess(process));
|
monitoredProcesses.Add(processName, new MonitoredProcess(process));
|
||||||
|
logger.Debug($"Added process {processName} to process monitor.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -142,6 +149,7 @@ namespace VRCX
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
monitoredProcesses.Add(processName, new MonitoredProcess(processName));
|
monitoredProcesses.Add(processName, new MonitoredProcess(processName));
|
||||||
|
logger.Debug($"Added process {processName} to process monitor.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -152,6 +160,7 @@ namespace VRCX
|
|||||||
{
|
{
|
||||||
processName = processName.ToLower();
|
processName = processName.ToLower();
|
||||||
monitoredProcesses.Remove(processName);
|
monitoredProcesses.Remove(processName);
|
||||||
|
logger.Debug($"Removed process {processName} from process monitor.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +184,6 @@ namespace VRCX
|
|||||||
public Process Process { get; private set; }
|
public Process Process { get; private set; }
|
||||||
public string ProcessName { get; private set; }
|
public string ProcessName { get; private set; }
|
||||||
public bool IsRunning { get; private set; }
|
public bool IsRunning { get; private set; }
|
||||||
public DateTime LastExitTime { get; private set; }
|
|
||||||
|
|
||||||
public bool HasName(string processName)
|
public bool HasName(string processName)
|
||||||
{
|
{
|
||||||
@@ -187,16 +195,11 @@ namespace VRCX
|
|||||||
IsRunning = false;
|
IsRunning = false;
|
||||||
Process?.Dispose();
|
Process?.Dispose();
|
||||||
Process = null;
|
Process = null;
|
||||||
LastExitTime = DateTime.Now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessStarted(Process process)
|
public void ProcessStarted(Process process)
|
||||||
{
|
{
|
||||||
// check last exit time to prevent status flapping
|
Process = process;
|
||||||
if (LastExitTime != DateTime.MinValue && DateTime.Now - LastExitTime < TimeSpan.FromSeconds(5))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Process = process;
|
|
||||||
ProcessName = process.ProcessName.ToLower();
|
ProcessName = process.ProcessName.ToLower();
|
||||||
IsRunning = true;
|
IsRunning = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user