Add Windows Firewall rules to installer - Automated firewall configuration for inbound/outbound traffic and port access - Service start checkbox option for user control - Clean firewall rule removal during uninstallation

This commit is contained in:
2025-08-21 18:21:03 +02:00
parent 6497d26e5f
commit 415417b348
6 changed files with 52 additions and 43 deletions

View File

@ -20,7 +20,7 @@ DefaultGroupName={#MyAppName}
AllowNoIcons=yes
LicenseFile=..\LICENSE
OutputDir=..\dist
OutputBaseFilename=medi-wol-setup-v2
OutputBaseFilename=medi-wol-setup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
@ -35,9 +35,11 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
Name: "startservice"; Description: "{cm:StartServiceAfterInstall}"; GroupDescription: "{cm:ServiceOptions}"
[Files]
Source: "..\dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "nssm.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\web\static\*"; DestDir: "{app}\web\static"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "..\web\templates\*"; DestDir: "{app}\web\templates"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "..\LICENSE"; DestDir: "{app}"; Flags: ignoreversion
@ -50,12 +52,42 @@ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: de
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
[Run]
; Startet die Anwendung nach der Installation
Filename: "{app}\{#MyAppExeName}"; Parameters: "-port {code:GetPort}"; StatusMsg: "Starte Medi-WOL..."; Flags: runhidden nowait
; Installiere Medi-WOL als Windows-Dienst mit NSSM
Filename: "{app}\nssm.exe"; Parameters: "install ""{#MyAppServiceName}"" ""{app}\{#MyAppExeName}"""; StatusMsg: "Installiere Medi-WOL als Windows-Dienst..."; Flags: runhidden
; Setze die Kommandozeilenparameter für den Port
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppParameters ""-port {code:GetPort}"""; Flags: runhidden
; Setze Service-Beschreibung
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" Description ""{#MyAppServiceDescription}"""; Flags: runhidden
; Setze Service-Starttyp auf automatisch
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" Start SERVICE_AUTO_START"; Flags: runhidden
; Setze das Arbeitsverzeichnis
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppDirectory ""{app}"""; Flags: runhidden
; Setze Ausgabe-Umleitung für Debugging
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStdout ""{app}\service.log"""; Flags: runhidden
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStderr ""{app}\service-error.log"""; Flags: runhidden
; Setze Service-Restart bei Fehler
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppRestartDelay 5000"; Flags: runhidden
; Setze Timeout für Service-Start
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStopMethodSkip 0"; Flags: runhidden
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStopMethodConsole 1500"; Flags: runhidden
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStopMethodWindow 1500"; Flags: runhidden
Filename: "{app}\nssm.exe"; Parameters: "set ""{#MyAppServiceName}"" AppStopMethodThreads 1500"; Flags: runhidden
; Service nach Installation starten mit Verzögerung
Filename: "{app}\nssm.exe"; Parameters: "start ""{#MyAppServiceName}"""; StatusMsg: "Starte Medi-WOL Dienst..."; Flags: runhidden waituntilterminated; Check: ShouldStartService
; Windows Firewall-Ausnahmen für den Service hinzufügen
Filename: "netsh.exe"; Parameters: "advfirewall firewall add rule name=""{#MyAppServiceName} - Inbound"" dir=in action=allow program=""{app}\{#MyAppExeName}"" enable=yes"; StatusMsg: "Erstelle Windows Firewall-Ausnahme (Eingehend)..."; Flags: runhidden
Filename: "netsh.exe"; Parameters: "advfirewall firewall add rule name=""{#MyAppServiceName} - Outbound"" dir=out action=allow program=""{app}\{#MyAppExeName}"" enable=yes"; StatusMsg: "Erstelle Windows Firewall-Ausnahme (Ausgehend)..."; Flags: runhidden
Filename: "netsh.exe"; Parameters: "advfirewall firewall add rule name=""{#MyAppServiceName} - Port {code:GetPort}"" dir=in action=allow protocol=TCP localport={code:GetPort} enable=yes"; StatusMsg: "Erstelle Windows Firewall-Port-Regel..."; Flags: runhidden
[UninstallRun]
; Stoppe die Anwendung vor der Deinstallation
Filename: "taskkill.exe"; Parameters: "/F /IM {#MyAppExeName}"; Flags: runhidden
; Stoppe den Windows-Dienst vor der Deinstallation
Filename: "{app}\nssm.exe"; Parameters: "stop ""{#MyAppServiceName}"""; Flags: runhidden
; Entferne den Windows-Dienst
Filename: "{app}\nssm.exe"; Parameters: "remove ""{#MyAppServiceName}"" confirm"; StatusMsg: "Entferne Medi-WOL Dienst..."; Flags: runhidden
; Entferne Windows Firewall-Regeln
Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=""{#MyAppServiceName} - Inbound"""; Flags: runhidden
Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=""{#MyAppServiceName} - Outbound"""; Flags: runhidden
Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=""{#MyAppServiceName} - Port {code:GetPort}"""; Flags: runhidden
[Code]
var
@ -108,10 +140,20 @@ begin
end;
end;
function ShouldStartService(): Boolean;
begin
Result := WizardIsTaskSelected('startservice');
end;
[CustomMessages]
german.CreateDesktopIcon=Desktop-Verknüpfung erstellen
german.CreateQuickLaunchIcon=Quick Launch-Verknüpfung erstellen
german.AdditionalIcons=Zusätzliche Verknüpfungen:
german.ServiceOptions=Service-Optionen:
german.StartServiceAfterInstall=Service nach der Installation starten
german.UninstallProgram=Medi-WOL entfernen
english.ServiceOptions=Service Options:
english.StartServiceAfterInstall=Start service after installation