Fix: Installer self-contained Publish + Selbstbereinigung vor Install (v2.5.0)

- dotnet publish lief zuvor mit --self-contained false → Installer nur 2MB
  ohne .NET-Runtime, schlägt auf Rechnern ohne .NET 8 fehl. Jetzt wieder
  self-contained Single-File wie historische Versionen (~53MB)
- setup.iss: Vor Installation werden jetzt automatisch verwaiste
  IT-Nexus-Agent.exe Prozesse gekillt und Reste eines laufenden
  Self-Update-Zyklus (update.cmd, heruntergeladener Installer) entfernt
- Behebt Installations-Instabilität durch File-Locks bei Upgrades

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 11:02:00 +02:00
parent e2521f405d
commit cb59cfe9cf

View File

@@ -64,17 +64,31 @@ Type: files; Name: "{commonappdata}\IT Nexus Agent\agent.log"
procedure CurStepChanged(CurStep: TSetupStep); procedure CurStepChanged(CurStep: TSetupStep);
var var
ResultCode: Integer; ResultCode: Integer;
AppData: String;
begin begin
if CurStep = ssInstall then begin if CurStep = ssInstall then begin
// Service stoppen (neue Architektur) // Service stoppen (neue Architektur)
Exec('net.exe', 'stop "IT Nexus Agent"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); Exec('net.exe', 'stop "IT Nexus Agent"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// Alte Scheduled Tasks (v1.x PowerShell-Agent) entfernen Sleep(1500);
// Verwaiste Prozesse hart killen (überlebt Service-Stop manchmal, z.B. Consent/Capture-Helper)
Exec('taskkill.exe', '/F /IM IT-Nexus-Agent.exe /T', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Sleep(1000);
// Reste eines laufenden Self-Update-Zyklus entfernen (update.cmd + heruntergeladener Installer)
AppData := ExpandConstant('{commonappdata}\IT Nexus Agent');
if FileExists(AppData + '\update.cmd') then
DeleteFile(AppData + '\update.cmd');
if FileExists(AppData + '\IT-Nexus-Agent-Setup-Update.exe') then
DeleteFile(AppData + '\IT-Nexus-Agent-Setup-Update.exe');
// Alte Scheduled Tasks (v1.x PowerShell-Agent + RDP-Helper-Reste) entfernen
Exec('schtasks.exe', '/delete /tn "IT Nexus Agent" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); Exec('schtasks.exe', '/delete /tn "IT Nexus Agent" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Exec('schtasks.exe', '/delete /tn "IT Nexus Agent Watcher" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); Exec('schtasks.exe', '/delete /tn "IT Nexus Agent Watcher" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Exec('schtasks.exe', '/delete /tn "ITNexusAgent" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); Exec('schtasks.exe', '/delete /tn "ITNexusAgent" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Exec('schtasks.exe', '/delete /tn "ITNexusAgentWatcher" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); Exec('schtasks.exe', '/delete /tn "ITNexusAgentWatcher" /f', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
// Autostart-Eintrag aus vorheriger Version entfernen (falls vorhanden) // Autostart-Eintrag aus vorheriger Version entfernen (falls vorhanden)
RegDeleteValue(HKCU, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'IT Nexus Agent'); RegDeleteValue(HKCU, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'IT Nexus Agent');
Sleep(2000); Sleep(1500);
end; end;
end; end;