Initial commit: IT Nexus Web-App

This commit is contained in:
2026-06-01 20:49:07 +02:00
commit 8023765e6c
387 changed files with 106900 additions and 0 deletions

109
agent-cs/AgentService.cs Normal file
View File

@@ -0,0 +1,109 @@
using System.ServiceProcess;
using System.Diagnostics;
namespace ITNexusAgent;
public class AgentService : ServiceBase
{
private CancellationTokenSource? _cts;
private Task? _worker;
public AgentService()
{
ServiceName = "IT Nexus Agent";
CanStop = true;
CanPauseAndContinue = false;
AutoLog = false;
}
protected override void OnStart(string[] args)
{
_cts = new CancellationTokenSource();
_worker = Task.Run(() => new AgentWorker(_cts.Token).RunAsync());
}
protected override void OnStop()
{
_cts?.Cancel();
_worker?.Wait(TimeSpan.FromSeconds(10));
}
public static void Install(string exePath)
{
// Bestehenden Service stoppen + löschen (falls vorhanden, damit binPath aktualisiert wird)
Run("net.exe", "stop \"IT Nexus Agent\"");
System.Threading.Thread.Sleep(2000);
Run("sc.exe", "delete \"IT Nexus Agent\"");
System.Threading.Thread.Sleep(1000);
// Dashboard-Prozesse beenden damit EXE nicht gesperrt ist
foreach (var p in System.Diagnostics.Process.GetProcessesByName("IT-Nexus-Agent"))
{
try { if (p.MainModule?.FileName != exePath) p.Kill(); } catch { }
}
// Neu erstellen mit korrektem Pfad
Run("sc.exe", $"create \"IT Nexus Agent\" binPath= \"{exePath}\" start= auto DisplayName= \"IT Nexus Agent\"");
Run("sc.exe", "description \"IT Nexus Agent\" \"Cereda Systems IT Nexus Monitoring Agent\"");
Run("sc.exe", "failure \"IT Nexus Agent\" reset= 60 actions= restart/5000/restart/10000/restart/30000");
Run("net.exe", "start \"IT Nexus Agent\"");
AgentWorker.Log($"Service installiert: {exePath}");
}
private static void Run(string exe, string args)
{
try
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(exe, args)
{ CreateNoWindow = true, UseShellExecute = false })?.WaitForExit();
}
catch { }
}
public static void Uninstall()
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("net.exe",
"stop \"IT Nexus Agent\"")
{ CreateNoWindow = true })?.WaitForExit();
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("sc.exe",
"delete \"IT Nexus Agent\"")
{ CreateNoWindow = true })?.WaitForExit();
AgentWorker.Log("Service deinstalliert");
}
// Migration vom alten PowerShell-Agent
public static void MigrateFromOldAgent()
{
try
{
var oldDataDir = @"C:\ProgramData\IT Nexus Agent";
var oldConfigPath = Path.Combine(oldDataDir, "config.json");
// Alte Scheduled Tasks entfernen
foreach (var taskName in new[] { "IT Nexus Agent", "IT Nexus Announcement Watcher" })
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("schtasks.exe",
$"/delete /tn \"{taskName}\" /f")
{ CreateNoWindow = true })?.WaitForExit();
}
// Alte PS1-Dateien bereinigen
if (Directory.Exists(oldDataDir))
{
foreach (var f in Directory.GetFiles(oldDataDir, "*.ps1"))
try { File.Delete(f); } catch { }
foreach (var f in Directory.GetFiles(oldDataDir, "*.update"))
try { File.Delete(f); } catch { }
}
AgentWorker.Log("Migration vom alten PowerShell-Agent abgeschlossen");
}
catch (Exception ex)
{
AgentWorker.Log($"Migration-Warnung: {ex.Message}");
}
}
}