Nuovo installer/PrepStep.iss (Inno Setup 6): installa in %LOCALAPPDATA%\Programs\PrepStep senza diritti di amministratore, con collegamenti nel menu Start al programma e al disinstallatore. Se l'app è già installata chiede se aggiornarla o disinstallarla (Inno da solo aggiornerebbe sempre); con /VERYSILENT aggiorna senza chiedere. Il DB è ora sempre cad_index.db accanto all'eseguibile, cioè nella cartella di installazione: non si ricorda più l'ultimo DB aperto (ultimo_db.txt) e "Apri DB..." vale solo per la sessione. Senza una cartella di lavoro salvata si propone la cartella di installazione invece di quella del DB. Doc aggiornati nello stesso commit: README.md, CLAUDE.md, docs/architettura.md, docs/db-cad-index.md, docs/guida-utente.md, CHANGELOG.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
79 lines
2.8 KiB
Plaintext
79 lines
2.8 KiB
Plaintext
; Setup per-utente di Cevolani StepPrep: installa in %LOCALAPPDATA%\Programs\PrepStep
|
|
; senza richiedere diritti di amministratore.
|
|
; Prima: dotnet publish (vedi README), poi: iscc installer\PrepStep.iss
|
|
|
|
#define Exe "..\PrepStep\publish\PrepStep.exe"
|
|
; Versione letta dall'exe (<Version> nel csproj), tolto l'eventuale "+<commit>" di .NET.
|
|
#define AppVersion GetStringFileInfo(Exe, "ProductVersion")
|
|
#if Pos("+", AppVersion) > 0
|
|
#define AppVersion Copy(AppVersion, 1, Pos("+", AppVersion) - 1)
|
|
#endif
|
|
; Non cambiare AppGuid: è quello che fa riconoscere a Windows gli aggiornamenti come la stessa app.
|
|
#define AppGuid "FAC1B760-4735-422F-86F0-888484CF2830"
|
|
|
|
[Setup]
|
|
AppId={{{#AppGuid}}
|
|
AppName=Cevolani StepPrep
|
|
AppVersion={#AppVersion}
|
|
AppPublisher=Cevolani
|
|
; Con PrivilegesRequired=lowest {autopf} diventa %LOCALAPPDATA%\Programs.
|
|
PrivilegesRequired=lowest
|
|
DefaultDirName={autopf}\PrepStep
|
|
DisableDirPage=yes
|
|
DisableProgramGroupPage=yes
|
|
ArchitecturesAllowed=x64compatible
|
|
ArchitecturesInstallIn64BitMode=x64compatible
|
|
SetupIconFile=..\PrepStep\app.ico
|
|
UninstallDisplayIcon={app}\PrepStep.exe
|
|
UninstallDisplayName=Cevolani StepPrep
|
|
OutputDir=Output
|
|
OutputBaseFilename=PrepStep-Setup-{#AppVersion}
|
|
Compression=lzma2
|
|
SolidCompression=yes
|
|
|
|
[Languages]
|
|
Name: "it"; MessagesFile: "compiler:Languages\Italian.isl"
|
|
|
|
[Tasks]
|
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
|
|
|
[Files]
|
|
Source: "{#Exe}"; DestDir: "{app}"; Flags: ignoreversion
|
|
|
|
[Icons]
|
|
Name: "{autoprograms}\Cevolani StepPrep"; Filename: "{app}\PrepStep.exe"
|
|
Name: "{autodesktop}\Cevolani StepPrep"; Filename: "{app}\PrepStep.exe"; Tasks: desktopicon
|
|
Name: "{autoprograms}\Disinstalla Cevolani StepPrep"; Filename: "{uninstallexe}"
|
|
|
|
[Run]
|
|
Filename: "{app}\PrepStep.exe"; Description: "{cm:LaunchProgram,Cevolani StepPrep}"; Flags: nowait postinstall skipifsilent
|
|
|
|
[Code]
|
|
{ Se l'app è già installata, chiede se aggiornarla o disinstallarla (Inno da solo aggiornerebbe
|
|
sempre, senza offrire la disinstallazione). In modalità silenziosa aggiorna senza chiedere. }
|
|
function InitializeSetup(): Boolean;
|
|
var
|
|
Disinstallatore: String;
|
|
Codice: Integer;
|
|
begin
|
|
Result := True;
|
|
if WizardSilent then
|
|
Exit;
|
|
if not RegQueryStringValue(HKCU,
|
|
'Software\Microsoft\Windows\CurrentVersion\Uninstall\{' + '{#AppGuid}' + '}_is1',
|
|
'UninstallString', Disinstallatore) then
|
|
Exit;
|
|
case MsgBox('Cevolani StepPrep è già installato.' + #13#10#13#10 +
|
|
'Sì: aggiorna / reinstalla' + #13#10 +
|
|
'No: disinstalla' + #13#10 +
|
|
'Annulla: esci senza fare nulla', mbConfirmation, MB_YESNOCANCEL) of
|
|
IDNO:
|
|
begin
|
|
Exec(RemoveQuotes(Disinstallatore), '', '', SW_SHOW, ewWaitUntilTerminated, Codice);
|
|
Result := False;
|
|
end;
|
|
IDCANCEL:
|
|
Result := False;
|
|
end;
|
|
end;
|