#define MyAppName "AZA Desktop" #ifndef MyAppVersion #define MyAppVersion "0.1.0" #endif #define MyAppPublisher "AZA MedWork" #define MyAppExeName "aza_desktop.exe" #define MyAppSourceDir SourcePath + "\..\dist\aza_desktop" [Setup] AppId={{B7E4C0D2-6B5D-4D39-9D7C-5B0D5E8C2A11} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL=https://aza-medwork.ch DefaultDirName={autopf}\AZA Desktop DefaultGroupName=AZA Desktop DisableProgramGroupPage=yes OutputDir={#MyAppSourceDir}\..\..\dist\installer OutputBaseFilename=aza_desktop_setup Compression=lzma SolidCompression=yes WizardStyle=modern PrivilegesRequired=admin ArchitecturesInstallIn64BitMode=x64 UninstallDisplayIcon={app}\{#MyAppExeName} SetupIconFile={#MyAppSourceDir}\..\..\logo.ico SetupMutex=AZADesktopSetupMutex CloseApplications=no RestartApplications=no [Languages] Name: "german"; MessagesFile: "compiler:Languages\German.isl" [Tasks] Name: "desktopicon"; Description: "Desktop-Verknuepfung erstellen"; GroupDescription: "Zusaetzliche Aufgaben:" [Dirs] Name: "{app}\config"; Permissions: users-modify [InstallDelete] Type: filesandordirs; Name: "{app}\_internal\*.pyd" Type: filesandordirs; Name: "{app}\_internal\*.dll" Type: files; Name: "{app}\_internal\*.tmp" [Files] Source: "{#MyAppSourceDir}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete Source: "{#MyAppSourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace; Excludes: "config\aza_runtime.env,{#MyAppExeName}" Source: "{#MyAppSourceDir}\_internal\backend_url.txt"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist Source: "{#MyAppSourceDir}\_internal\backend_token.txt"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist Source: "{#MyAppSourceDir}\..\..\setup_openai_runtime.ps1"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyAppSourceDir}\..\..\logo.ico"; DestDir: "{app}"; Flags: ignoreversion [Icons] Name: "{group}\AZA Desktop"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\logo.ico" Name: "{autodesktop}\AZA Desktop"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\logo.ico"; Tasks: desktopicon Name: "{group}\AZA - OpenAI Schluessel einrichten"; Filename: "powershell.exe"; Parameters: "-ExecutionPolicy Bypass -File ""{app}\setup_openai_runtime.ps1""" [Run] Filename: "{app}\{#MyAppExeName}"; Description: "AZA Desktop starten"; Flags: nowait postinstall skipifsilent [UninstallRun] Filename: "netsh.exe"; Parameters: "advfirewall firewall delete rule name=""AZA Desktop - Lokale Kommunikation"""; Flags: runhidden; RunOnceId: "DelFirewallRule" [Code] function InitializeSetup(): Boolean; var R: Integer; begin Result := True; Exec('taskkill.exe', '/F /IM aza_desktop.exe', '', SW_HIDE, ewWaitUntilTerminated, R); Sleep(500); end; function PrepareToInstall(var NeedsRestart: Boolean): String; var R: Integer; begin Result := ''; Exec('taskkill.exe', '/F /IM aza_desktop.exe', '', SW_HIDE, ewWaitUntilTerminated, R); Sleep(500); end; procedure CurStepChanged(CurStep: TSetupStep); var R: Integer; AppPath, ExePath, Cmd: String; begin if CurStep = ssPostInstall then begin AppPath := ExpandConstant('{app}'); ExePath := AddBackslash(AppPath) + 'aza_desktop.exe'; if FileExists(ExePath) then begin Exec('netsh.exe', 'advfirewall firewall delete rule name="AZA Desktop - Lokale Kommunikation"', '', SW_HIDE, ewWaitUntilTerminated, R); Sleep(200); Cmd := 'advfirewall firewall add rule name="AZA Desktop - Lokale Kommunikation" dir=in action=allow program="' + ExePath + '" localport=8000 protocol=tcp remoteip=127.0.0.1'; if not Exec('netsh.exe', Cmd, '', SW_HIDE, ewWaitUntilTerminated, R) or (R <> 0) then Log('Firewall-Regel konnte nicht angelegt werden (Code: ' + IntToStr(R) + ')'); end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var UserDataDir: String; begin if CurUninstallStep = usPostUninstall then begin UserDataDir := ExpandConstant('{userappdata}\AZA Desktop'); if DirExists(UserDataDir) then begin if MsgBox('Moechten Sie Ihre persoenlichen AZA-Daten ebenfalls loeschen?' + #13#10 + #13#10 + 'Dazu gehoeren:' + #13#10 + ' - Benutzerprofil (Name, Fachrichtung, Code)' + #13#10 + ' - Transkripte, Briefe, Rezepte, Kostenvoranschlaege' + #13#10 + ' - Vorlagen und Vorlagenpraeferenzen' + #13#10 + ' - Add-on-/Modul-Sichtbarkeit' + #13#10 + ' - KI-Einwilligung und Signatur' + #13#10 + ' - Autotext und Textbloecke' + #13#10 + ' - Stilprofile fuer Briefe' + #13#10 + ' - Alle sonstigen Einstellungen' + #13#10 + #13#10 + 'Ordner: ' + UserDataDir + #13#10 + #13#10 + 'Wenn Sie "Nein" waehlen, bleiben alle Daten erhalten' + #13#10 + 'und stehen bei einer Neuinstallation wieder zur Verfuegung.', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then begin DelTree(UserDataDir, True, True, True); end; end; end; end;