@@ -233,10 +233,12 @@ jobs:
233233 exit 1
234234 }
235235
236- - name : Create Windows installer script
236+ - name : Create Windows installer scripts
237237 run : |
238238 $version = "${{ needs.build-linux.outputs.version }}"
239- $issScript = @"
239+
240+ # SYSTEM INSTALLER (Admin required) - Fixed version
241+ $issSystemScript = @"
240242 #define MyAppName "FileFind"
241243 #define MyAppVersion "$version"
242244 #define MyAppPublisher "Nicolas DEOUX"
@@ -255,20 +257,24 @@ jobs:
255257 DefaultGroupName={#MyAppName}
256258 AllowNoIcons=yes
257259 OutputDir=.
258- OutputBaseFilename=FileFind-Setup-{#MyAppVersion}
260+ OutputBaseFilename=FileFind-Setup-System- {#MyAppVersion}
259261 Compression=lzma
260262 SolidCompression=yes
261263 WizardStyle=modern
262264 ArchitecturesAllowed=x86 x64
263265 ArchitecturesInstallIn64BitMode=x64
266+ PrivilegesRequired=admin
267+ ChangesEnvironment=yes
268+ UninstallDisplayIcon={app}\{#MyAppExeName}
264269
265270 [Languages]
266271 Name: "english"; MessagesFile: "compiler:Default.isl"
267272 Name: "french"; MessagesFile: "compiler:Languages\French.isl"
268273
269274 [Tasks]
270- Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
275+ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkonce
271276 Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1
277+ Name: "addtopath"; Description: "Add to PATH environment variable"; GroupDescription: "System Integration"; Flags: checkonce
272278
273279 [Files]
274280 Source: "src\filefind.exe"; DestDir: "{app}"; Flags: ignoreversion
@@ -277,15 +283,86 @@ jobs:
277283 Source: "docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs
278284
279285 [Icons]
280- Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
286+ Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"
281287 Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
282- Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
283- Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
288+ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
289+ Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
284290
285291 [Registry]
286292 Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekeyifempty
287293 Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekeyifempty
288294
295+ [Environment]
296+ Name: "PATH"; Value: "{app}"; Flags: expandconstants; Check: IsTaskSelected('addtopath')
297+
298+ [Run]
299+ Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
300+
301+ [Code]
302+ procedure InitializeWizard;
303+ begin
304+ WizardForm.LicenseAcceptedRadio.Checked := True;
305+ end;
306+ "@
307+
308+ # USER INSTALLER (No admin required)
309+ $issUserScript = @"
310+ #define MyAppName "FileFind"
311+ #define MyAppVersion "$version"
312+ #define MyAppPublisher "Nicolas DEOUX"
313+ #define MyAppURL "https://github.com/NDXDeveloper/FileFind"
314+ #define MyAppExeName "filefind.exe"
315+
316+ [Setup]
317+ AppId={{B8C5C1F0-8A2D-4E3F-9B1A-2C4D5E6F7G8H-USER}
318+ AppName={#MyAppName} (User Install)
319+ AppVersion={#MyAppVersion}
320+ AppPublisher={#MyAppPublisher}
321+ AppPublisherURL={#MyAppURL}
322+ AppSupportURL={#MyAppURL}
323+ AppUpdatesURL={#MyAppURL}
324+ DefaultDirName={localappdata}\Programs\{#MyAppName}
325+ DefaultGroupName={#MyAppName}
326+ AllowNoIcons=yes
327+ OutputDir=.
328+ OutputBaseFilename=FileFind-Setup-User-{#MyAppVersion}
329+ Compression=lzma
330+ SolidCompression=yes
331+ WizardStyle=modern
332+ ArchitecturesAllowed=x86 x64
333+ ArchitecturesInstallIn64BitMode=x64
334+ PrivilegesRequired=lowest
335+ PrivilegesRequiredOverridesAllowed=dialog
336+ ChangesEnvironment=yes
337+ UninstallDisplayIcon={app}\{#MyAppExeName}
338+
339+ [Languages]
340+ Name: "english"; MessagesFile: "compiler:Default.isl"
341+ Name: "french"; MessagesFile: "compiler:Languages\French.isl"
342+
343+ [Tasks]
344+ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkonce
345+ Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1
346+ Name: "addtopath"; Description: "Add to PATH environment variable (current user only)"; GroupDescription: "User Integration"; Flags: checkonce
347+
348+ [Files]
349+ Source: "src\filefind.exe"; DestDir: "{app}"; Flags: ignoreversion
350+ Source: "README.md"; DestDir: "{app}"; Flags: ignoreversion
351+ Source: "LICENSE.txt"; DestDir: "{app}"; Flags: ignoreversion
352+ Source: "docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs
353+
354+ [Icons]
355+ Name: "{userprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"
356+ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
357+ Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
358+
359+ [Registry]
360+ Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekeyifempty
361+ Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekeyifempty
362+
363+ [Environment]
364+ Name: "PATH"; Value: "{app}"; Flags: expandconstants; Check: IsTaskSelected('addtopath')
365+
289366 [Run]
290367 Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
291368
@@ -296,15 +373,21 @@ jobs:
296373 end;
297374 "@
298375
299- $issScript | Out-File -FilePath "installer.iss" -Encoding utf8
376+ # Save both scripts
377+ $issSystemScript | Out-File -FilePath "installer-system.iss" -Encoding utf8
378+ $issUserScript | Out-File -FilePath "installer-user.iss" -Encoding utf8
300379
301380 - name : Install Inno Setup
302381 run : |
303382 choco install innosetup -y
304383
305- - name : Create Windows installer
384+ - name : Create Windows installers
306385 run : |
307- & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss
386+ # Create System installer (admin required)
387+ & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer-system.iss
388+
389+ # Create User installer (no admin required)
390+ & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer-user.iss
308391
309392 - name : Create portable Windows archive
310393 run : |
@@ -327,7 +410,8 @@ jobs:
327410 with :
328411 name : windows-builds
329412 path : |
330- FileFind-Setup-*.exe
413+ FileFind-Setup-System-*.exe
414+ FileFind-Setup-User-*.exe
331415 filefind-windows-portable-*.zip
332416 src/filefind.exe
333417 retention-days : 30
@@ -374,10 +458,14 @@ jobs:
374458
375459 ### Downloads 📦
376460
377- - **Linux Debian/Ubuntu Package:** `filefind_${{ needs.build-linux.outputs.version }}_amd64.deb`
378- - **Linux Portable Archive:** `filefind-linux-portable-${{ needs.build-linux.outputs.version }}.tar.gz`
379- - **Windows Installer:** `FileFind-Setup-${{ needs.build-linux.outputs.version }}.exe`
380- - **Windows Portable Archive:** `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
461+ **Linux:**
462+ - 📦 **Debian/Ubuntu Package:** `filefind_${{ needs.build-linux.outputs.version }}_amd64.deb`
463+ - 📁 **Portable Archive:** `filefind-linux-portable-${{ needs.build-linux.outputs.version }}.tar.gz`
464+
465+ **Windows:**
466+ - 🔧 **System Installer (Admin):** `FileFind-Setup-System-${{ needs.build-linux.outputs.version }}.exe`
467+ - 👤 **User Installer (No Admin):** `FileFind-Setup-User-${{ needs.build-linux.outputs.version }}.exe`
468+ - 📁 **Portable Archive:** `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
381469
382470 ---
383471
@@ -417,19 +505,42 @@ jobs:
417505 ```
418506
419507 #### Windows
420- - **Installer:** Download and run `FileFind-Setup-${{ needs.build-linux.outputs.version }}.exe`
421- - **Portable:** Download and extract `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
508+
509+ **System Installer (Recommended for Admins):**
510+ - Download and run `FileFind-Setup-System-${{ needs.build-linux.outputs.version }}.exe`
511+ - Requires administrator privileges
512+ - Installs for all users in Program Files
513+ - Automatically adds to system PATH
514+
515+ **User Installer (For Standard Users):**
516+ - Download and run `FileFind-Setup-User-${{ needs.build-linux.outputs.version }}.exe`
517+ - No administrator privileges required
518+ - Installs in user AppData folder
519+ - Adds to user PATH only
520+
521+ **Portable:**
522+ - Download and extract `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
523+ - No installation required
422524
423525 ---
424526
527+ ### Features ✨
528+
529+ **New in this release:**
530+ - 🔧 **Dual Windows installers** - System (admin) and User (no admin) options
531+ - 🎯 **Automatic PATH setup** - FileFind available from command line
532+ - 🖥️ **Desktop shortcut** - Checked by default during installation
533+ - 🎨 **Proper icons** - Display correctly in Windows uninstall list
534+ - 📦 **Enhanced packaging** - Professional Linux .deb and Windows installers
535+
425536 ### Verification ✅
426537 All files are signed with SHA256 checksums available in `checksums.txt`.
427538
428- ### What's New
429- - Automated CI/CD pipeline for cross-platform builds
430- - Professional packaging for Linux (.deb) and Windows (installer)
431- - Portable archives for both platforms
432- - Enhanced build process with Lazarus 4.0.0
539+ ### Technical Details 🛠️
540+ - **Build System:** Automated CI/CD with GitHub Actions
541+ - **Compiler:** Lazarus 4.0.0 with Free Pascal Compiler 3.2.2
542+ - **Platforms:** Linux x86_64, Windows x86/x64
543+ - **Dependencies:** Minimal system dependencies for maximum compatibility
433544 env :
434545 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
435546
@@ -444,6 +555,12 @@ jobs:
444555 if [[ "${{ needs.build-linux.result }}" == "success" ]] && [[ "${{ needs.build-windows.result }}" == "success" ]]; then
445556 echo "✅ All builds completed successfully!"
446557 echo "Version: ${{ needs.build-linux.outputs.version }}"
558+ echo ""
559+ echo "📦 Artifacts generated:"
560+ echo " Linux: .deb package + portable archive"
561+ echo " Windows: System installer + User installer + portable archive"
562+ echo ""
563+ echo "🚀 Ready for release!"
447564 else
448565 echo "❌ Some builds failed"
449566 echo "Linux: ${{ needs.build-linux.result }}"
0 commit comments