; Установщик «System Helper» для Windows x64. ; Сборка: ISCC.exe /DAppVersion=0.1.0 installer\setup.iss ; Результат кладётся в dist\syshelper-<версия>-setup.exe #ifndef AppVersion #define AppVersion "0.0.0-dev" #endif #ifndef ExeSource #define ExeSource "..\target\release\syshelper.exe" #endif #define AppName "System Helper" #define AppExeName "syshelper.exe" #define AppUrl "http://127.0.0.1:8787" ; Имя задачи автообновления — должно совпадать с TASK_NAME в src/update.rs. #define TaskName "SysHelperUpdate" [Setup] ; AppId определяет программу при обновлении и удалении — не менять между версиями. AppId={{B3F1C0A2-7E5D-4A19-9C3B-2D8E6F4A1B57} AppName={#AppName} AppVersion={#AppVersion} AppVerName={#AppName} {#AppVersion} DefaultDirName={autopf}\SysHelper DefaultGroupName={#AppName} DisableProgramGroupPage=yes UninstallDisplayName={#AppName} UninstallDisplayIcon={app}\{#AppExeName} OutputDir=..\dist OutputBaseFilename=syshelper-{#AppVersion}-setup Compression=lzma2/max SolidCompression=yes WizardStyle=modern ; Ставим в 64-битный Program Files; программа собрана только под x64. ArchitecturesAllowed=x64compatible ArchitecturesInstallIn64BitMode=x64compatible ; Program Files и автозапуск через HKLM требуют администратора. PrivilegesRequired=admin CloseApplications=yes RestartApplications=no [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "english"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "autostart"; \ Description: "Запускать при входе в систему"; \ GroupDescription: "Дополнительно:" Name: "desktopicon"; \ Description: "{cm:CreateDesktopIcon}"; \ GroupDescription: "Дополнительно:"; \ Flags: unchecked [Dirs] ; Сюда работающая от пользователя программа кладёт скачанный установщик, а ; задача Планировщика (от SYSTEM) забирает его. Нужен доступ на запись обоим. Name: "{commonappdata}\SysHelper\update"; Permissions: users-modify [Files] Source: "{#ExeSource}"; DestDir: "{app}"; Flags: ignoreversion [Icons] Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}" Name: "{group}\Веб-панель"; Filename: "{#AppUrl}" Name: "{autodesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon [Registry] ; Автозапуск для всех пользователей. Запускается без повышения прав — ; этого хватает, чтобы завершать процессы того же пользователя. Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; \ ValueType: string; ValueName: "SysHelper"; \ ValueData: """{app}\{#AppExeName}"""; \ Flags: uninsdeletevalue; Tasks: autostart [Run] ; Задача автообновления: программа скачивает свежий установщик и просит ; Планировщик запустить его от SYSTEM с наивысшими правами — так обновление ; ставится тихо, без запроса UAC. Своего расписания у задачи нет (SC ONCE в ; прошлом), её лишь запускают по требованию из программы. Filename: "{sys}\schtasks.exe"; \ Parameters: "/Create /F /RU SYSTEM /RL HIGHEST /SC ONCE /SD 01/01/2000 /ST 00:00 /TN ""{#TaskName}"" /TR ""{commonappdata}\SysHelper\update\setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /NOCANCEL"""; \ Flags: runhidden; StatusMsg: "Настройка автообновления..." Filename: "{app}\{#AppExeName}"; \ Description: "Запустить {#AppName}"; \ Flags: nowait postinstall skipifsilent Filename: "{#AppUrl}"; \ Description: "Открыть веб-панель"; \ Flags: shellexec nowait postinstall skipifsilent [UninstallRun] Filename: "{sys}\schtasks.exe"; Parameters: "/Delete /F /TN ""{#TaskName}"""; \ Flags: runhidden; RunOnceId: "DelUpdateTask" Filename: "{sys}\taskkill.exe"; Parameters: "/f /im {#AppExeName}"; \ Flags: runhidden; RunOnceId: "StopApp"