Files
pebrel/scripts/installer.iss
T
kuddev a8e64baf21 chore(release): prepare 1.8.1 metadata and release contracts
Synchronize package versions and bilingual notes with verified issue references.
Allow releases without PR contributors to omit that section, with positive and
negative format coverage as requested by the maintainer.

Keep native update process operations and default-shell resolution inside the
platform boundary. Preserve transaction authority in the updater and tighten
the platform condition budget to the measured 484.
2026-09-15 23:38:21 +08:00

196 lines
9.7 KiB
Plaintext

#ifndef AppVersion
#define AppVersion "1.8.1"
#endif
#ifndef NumericVersion
#define NumericVersion "1.8.1.0"
#endif
#ifndef Configuration
#define Configuration "release"
#endif
#ifndef PackageBrand
#define PackageBrand "Pebrel"
#endif
#define RepoRoot ".."
#ifndef BuildRoot
#define BuildRoot RepoRoot + "\target\" + Configuration
#endif
[Setup]
#ifdef AcceptanceFixture
AppId={{76B778B5-76C6-4F60-9431-9E67C2A351AF}
AppName=Pebrel Update Acceptance
AppVerName=Pebrel Update Acceptance {#AppVersion}
#else
AppId={{61022144-7D0A-4E54-94F2-C329A8F58656}
AppName=Pebrel
AppVerName=Pebrel {#AppVersion}
#endif
AppVersion={#AppVersion}
AppPublisher=Kuddev
AppPublisherURL=https://github.com/Kuddev/pebrel
AppSupportURL=https://github.com/Kuddev/pebrel/issues
AppUpdatesURL=https://github.com/Kuddev/pebrel/releases
VersionInfoVersion={#NumericVersion}
VersionInfoTextVersion={#AppVersion}
VersionInfoCompany=Kuddev
VersionInfoDescription=Pebrel Installer
VersionInfoProductName=Pebrel
VersionInfoProductVersion={#NumericVersion}
VersionInfoProductTextVersion={#AppVersion}
DefaultDirName={code:DefaultInstallDir}
UsePreviousAppDir=yes
DefaultGroupName=Pebrel
UsePreviousGroup=no
DisableProgramGroupPage=yes
DisableWelcomePage=no
DisableDirPage=no
DisableReadyPage=no
PrivilegesRequired=lowest
ArchitecturesAllowed=x64compatible
MinVersion=10.0.17763
LicenseFile={#RepoRoot}\LICENSE
SetupIconFile={#RepoRoot}\nebula_app\windows\nebula.ico
UninstallDisplayIcon={app}\pebrel.exe
OutputDir={#RepoRoot}\dist
OutputBaseFilename={#PackageBrand}-v{#AppVersion}-windows-x64-setup
Compression=lzma2/max
SolidCompression=yes
WizardStyle=modern
CloseApplications=yes
RestartApplications=no
RestartIfNeededByRun=no
SetupLogging=yes
ChangesEnvironment=yes
ShowLanguageDialog=auto
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "chinesesimplified"; MessagesFile: "{#RepoRoot}\target\installer-tools\ChineseSimplified.isl"
[CustomMessages]
english.DesktopIcon=Create a desktop shortcut
english.AutoStart=Start Pebrel when I sign in to Windows
english.InstallFont=Install Maple Mono font for the current user
english.AddToPath=Add Pebrel to the user PATH
english.OpenInPebrel=Open in Pebrel
english.LaunchProgram=Launch Pebrel
english.UninstallProgram=Uninstall Pebrel
english.CloseLegacyProgram=Close the application at %1, then retry the installation.
english.MigrationFailed=Pebrel was installed, but the old installation could not be completely migrated: %1. Close the old application and run this installer again. Your other files and configuration were preserved.
english.MigrationPreflightFailed=Unable to check the previous installation: %1. Installation has not started.
english.RemovePathFailed=Unable to remove the Pebrel installation directory from PATH.
chinesesimplified.DesktopIcon=创建桌面快捷方式
chinesesimplified.AutoStart=登录 Windows 后启动 Pebrel
chinesesimplified.InstallFont=为当前用户安装 Maple Mono 字体
chinesesimplified.AddToPath=将 Pebrel 添加到当前用户 PATH
chinesesimplified.OpenInPebrel=在 Pebrel 中打开
chinesesimplified.LaunchProgram=启动 Pebrel
chinesesimplified.UninstallProgram=卸载 Pebrel
chinesesimplified.CloseLegacyProgram=请关闭 %1 中运行的程序,然后重试安装。
chinesesimplified.MigrationFailed=Pebrel 已安装,但旧安装未能完全迁移:%1。请关闭旧程序后重新运行此安装器。其他文件和配置已保留。
chinesesimplified.MigrationPreflightFailed=无法检查旧安装:%1。尚未开始安装。
chinesesimplified.RemovePathFailed=无法从 PATH 中移除 Pebrel 安装目录。
[Tasks]
#ifndef AcceptanceFixture
Name: "installfont"; Description: "{cm:InstallFont}"
Name: "addtopath"; Description: "{cm:AddToPath}"
Name: "desktopicon"; Description: "{cm:DesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "autostart"; Description: "{cm:AutoStart}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
#endif
[Files]
Source: "{#BuildRoot}\pebrel.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#RepoRoot}\README.md"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#RepoRoot}\README.zh-CN.md"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#BuildRoot}\pebrel-hook.exe"; DestDir: "{app}\runtime"; Flags: ignoreversion
Source: "{#BuildRoot}\conpty.dll"; DestDir: "{app}\runtime"; Flags: ignoreversion
Source: "{#BuildRoot}\OpenConsole.exe"; DestDir: "{app}\runtime"; Flags: ignoreversion
Source: "{#RepoRoot}\assets\fonts\MapleMonoNormal-NF-CN-Regular.ttf"; DestDir: "{app}\fonts"; Flags: ignoreversion
#ifndef AcceptanceFixture
Source: "{#RepoRoot}\assets\fonts\MapleMonoNormal-NF-CN-Regular.ttf"; DestDir: "{autofonts}"; FontInstall: "Maple Mono Normal NF CN"; Tasks: installfont; Flags: onlyifdoesntexist uninsneveruninstall
#endif
Source: "{#RepoRoot}\CHANGELOG.md"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{#RepoRoot}\INSTALL.md"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{#RepoRoot}\docs\lua-configuration.md"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{#RepoRoot}\docs\runtime-control-api.md"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{#RepoRoot}\docs\runtime-api-v1.schema.json"; DestDir: "{app}\docs"; Flags: ignoreversion
Source: "{#RepoRoot}\docs\skills\pebrel-runtime\SKILL.md"; DestDir: "{app}\skills\pebrel-runtime"; Flags: ignoreversion
Source: "{#RepoRoot}\docs\skills\pebrel-runtime\agents\openai.yaml"; DestDir: "{app}\skills\pebrel-runtime\agents"; Flags: ignoreversion
Source: "{#RepoRoot}\LICENSE"; DestDir: "{app}\licenses"; Flags: ignoreversion
Source: "{#RepoRoot}\licenses\LICENSE-LUA"; DestDir: "{app}\licenses"; Flags: ignoreversion
Source: "{#RepoRoot}\licenses\LICENSE-MLUA"; DestDir: "{app}\licenses"; Flags: ignoreversion
Source: "{#RepoRoot}\THIRD-PARTY-NOTICES"; DestDir: "{app}\licenses"; Flags: ignoreversion
[Icons]
#ifndef AcceptanceFixture
Name: "{group}\Pebrel"; Filename: "{app}\pebrel.exe"; Parameters: "--gpui"; WorkingDir: "{%USERPROFILE}"; AppUserModelID: "com.pebrel.terminal"
Name: "{group}\{cm:UninstallProgram}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\Pebrel"; Filename: "{app}\pebrel.exe"; Parameters: "--gpui"; WorkingDir: "{%USERPROFILE}"; AppUserModelID: "com.pebrel.terminal"; Tasks: desktopicon
Name: "{userstartup}\Pebrel"; Filename: "{app}\pebrel.exe"; Parameters: "--gpui"; WorkingDir: "{%USERPROFILE}"; AppUserModelID: "com.pebrel.terminal"; Tasks: autostart
#endif
[Registry]
#ifndef AcceptanceFixture
Root: HKCU; Subkey: "Software\Pebrel"; ValueType: dword; ValueName: "InstallerAddedToPath"; ValueData: "1"; Tasks: addtopath; Check: NeedsAddToPath; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}"; Tasks: addtopath; Check: NeedsAddToPath; Flags: preservestringtype
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\pebrel.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\pebrel.exe"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\pebrel.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
; 目录背景使用 %V,选中的目录对象使用 %1;两者必须由 Explorer 展开后再交给 CLI。
; 每个动词使用独立的应用子键,卸载时只删除 Pebrel 自己注册的菜单。
Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\Pebrel"; ValueType: string; ValueName: "MUIVerb"; ValueData: "{cm:OpenInPebrel}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\Pebrel"; ValueType: string; ValueName: "Icon"; ValueData: "{app}\pebrel.exe,0"
Root: HKCU; Subkey: "Software\Classes\Directory\Background\shell\Pebrel\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pebrel.exe"" --gpui --working-directory ""%V"""
Root: HKCU; Subkey: "Software\Classes\Directory\shell\Pebrel"; ValueType: string; ValueName: "MUIVerb"; ValueData: "{cm:OpenInPebrel}"; Flags: uninsdeletekey
Root: HKCU; Subkey: "Software\Classes\Directory\shell\Pebrel"; ValueType: string; ValueName: "Icon"; ValueData: "{app}\pebrel.exe,0"
Root: HKCU; Subkey: "Software\Classes\Directory\shell\Pebrel\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pebrel.exe"" --gpui --working-directory ""%1"""
#endif
[Run]
Filename: "{app}\pebrel.exe"; Parameters: "--gpui"; Description: "{cm:LaunchProgram}"; WorkingDir: "{%USERPROFILE}"; Flags: nowait postinstall skipifsilent
[UninstallRun]
#ifndef AcceptanceFixture
; 必须在 Inno 删除 pebrel.exe 前调用应用自己的结构化清理逻辑,避免直接改写用户配置。
Filename: "{app}\pebrel.exe"; Parameters: "setup-ai --remove"; WorkingDir: "{app}"; RunOnceId: "RemovePebrelAiHooks"; Flags: runhidden skipifdoesntexist
#endif
[Code]
#include "installer-migration.iss"
function NeedsAddToPath: Boolean;
var
ExistingPath: string;
begin
ExistingPath := '';
Result := True;
if RegQueryStringValue(HKCU, 'Environment', 'Path', ExistingPath) then
Result := not PathContainsDirectory(ExistingPath, ExpandConstant('{app}'));
end;
#ifndef AcceptanceFixture
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ExistingPath: string;
begin
if CurUninstallStep <> usUninstall then
Exit;
if not RegValueExists(HKCU, 'Software\Pebrel', 'InstallerAddedToPath') then
Exit;
ExistingPath := '';
if RegQueryStringValue(HKCU, 'Environment', 'Path', ExistingPath) and
not RegWriteExpandStringValue(HKCU, 'Environment', 'Path',
RemovePathDirectory(ExistingPath, ExpandConstant('{app}'))) then
RaiseException(CustomMessage('RemovePathFailed'));
if not RegDeleteValue(HKCU, 'Software\Pebrel', 'InstallerAddedToPath') then
RaiseException(CustomMessage('RemovePathFailed'));
RegDeleteKeyIfEmpty(HKCU, 'Software\Pebrel');
end;
#endif