Initial commit: IT Nexus Web-App
This commit is contained in:
109
agent-cs/AgentService.cs
Normal file
109
agent-cs/AgentService.cs
Normal 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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user