Newsgroup: it.comp.appl.access
Titolo: Inno Setup e Runtime

Buongiorno a tutti, per la prima volta dovrei creare un pacchetto con Inno Setup per installare un ACCDE.
Diversi utenti non avranno Access, vorrei configurare INNO SETUP per far si che, in assenza di Access installi anche le runtime, viceversa, solo l'ACCDE.
 
Mi sto probabilmente perdendo in un bicchiere d'acqua, ma sono davvero a digiuno.
 
Attualmente ho provato a configurare così Inno Setup
 
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{3A7A5135-F8F9-4DCB-9397-99D8D4C981C4}
AppName=EBP-SW
AppVersion=1.5
;AppVerName=EBP-SW 1.5
AppPublisher=ChiMa Group
AppPublisherURL=
https://www.chimagroup.it/
 
AppSupportURL=
https://www.chimagroup.it/
 
AppUpdatesURL=
https://www.chimagroup.it/
 
CreateAppDir=no
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=EBP-SW Setup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
 
[Languages]
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
 
[Files]
Source: "C:\Users\Mauro\Desktop\CRM\EBP-SW.accde"; DestDir: "{win}"; Flags: ignoreversion
Source: "C:\Users\Mauro\Desktop\OfficeSetup.exe"; DestDir: "{win}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 
[Code]
      function IsAccessInstalled: Boolean;
      begin
        Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Office\ClickToRun\Configuration\SharedComputerLicensing');
      end;
 
      procedure CurStepChanged(CurStep: TSetupStep);
      var
        ResultCode: Integer;
      begin
        if (CurStep = ssInstall) and (not IsAccessInstalled) then
        begin
          ExtractTemporaryFile('OfficeSetup.exe');
          Exec(ExpandConstant('{tmp}\OfficeSetup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        end;
      end;
 
 
Ma testando sul mio PC dove ovviamente Office 365 è installato, mi fa partire di default l'installazione delle Runtime.
 
Dove sta l'errore a vostro avviso?
 
Grazie e buon lavoro a tutti.
 
Mauro

[UPDATE] Così parrebbe funzionare
 
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
 
[Setup]
AppId={{3A7A5135-F8F9-4DCB-9397-99D8D4C981C4}
AppName=EBP-SW
AppVersion=1.5
AppPublisher=ChiMa Group
AppPublisherURL=
https://www.chimagroup.it/
 
AppSupportURL=
https://www.chimagroup.it/
 
AppUpdatesURL=
https://www.chimagroup.it/
 
CreateAppDir=no
OutputBaseFilename=EBP-SW Setup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
 
[Languages]
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
 
[Files]
Source: "C:\Users\Mauro\Desktop\CRM\EBP-SW.accde"; DestDir: "{userdesktop}"; Flags: ignoreversion
 
[Code]
function IsAccess365Installed(): Boolean;
var
  AccessExePath: string;
begin
  AccessExePath := ExpandConstant('C:\Program Files\Microsoft Office\root\Office16\msaccess.exe');
  Result := FileExists(AccessExePath);
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
begin
  if (CurStep = ssInstall) then
  begin
    if IsAccess365Installed() then
    begin
      MsgBox('Access 365 è installato. Proseguo con l''installazione di EBP-SW.', mbInformation, MB_OK);
    end
    else
    begin
      MsgBox('Access 365 non è installato. Procedo con l''installazione delle Runtime di Access.', mbInformation, MB_OK);
      ExtractTemporaryFile('OfficeSetup.exe');
      Exec(ExpandConstant('{tmp}\OfficeSetup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end;
  end;
end;
 
function InitializeSetup(): Boolean;
begin
  Result := True;
 
  if (not IsAccess365Installed()) then
  begin
    if (MsgBox('Access 365 non è installato. Proseguo con l''installazione delle Runtime di Access? Se non le installi, potresti non essere in grado di utilizzare il nostro programma EBP-SW', mbConfirmation, MB_YESNO) = IDNO) then
    begin
      Result := False;
    end;
  end;
end;
 

Il 27/06/2023 17:48, MC ha scritto:
 > RegKeyExists(HKEY_LOCAL_MACHINE, 
'SOFTWARE\Microsoft\Office\ClickToRun\Configuration\SharedComputerLicensing')
 
L'avvio installazione runtime sembra sia subordinata alla presenza o 
meno della chiave sopra
Verifica sul tuo pc se la trovi
Se NON la trovi (e quindi avvia l'installazione del runtime) vuol dire 
che la funzione IsAccessInstalled  e' da rivedere

Ora funziona tutto alla grande, comunque avevo seguito anche il tuo suggerimento, il codice DEFINITIVO (magari a qualcuno potrebbe servire) è il seguente:
 
[Setup]
AppId={{3A7A5135-F8F9-4DCB-9397-99D8D4C981C4}
AppName=EBP-SW
AppVersion=1.5
AppPublisher=ChiMa Group
AppPublisherURL=
https://www.chimagroup.it/
 
AppSupportURL=
https://www.chimagroup.it/
 
AppUpdatesURL=
https://www.chimagroup.it/
 
CreateAppDir=no
OutputBaseFilename=EBP-SW Setup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
WizardSmallImageFile=EBP_FaviconPOS_BMP.bmp
UninstallDisplayIcon={userdesktop}\EBP-SW.accde
 
[Languages]
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
 
[Files]
Source: "C:\Users\Mauro\Desktop\CRM\EBP-SW.accde"; DestDir: "{userdesktop}"; Flags: ignoreversion
Source: "C:\Users\Mauro\Desktop\CRM\OfficeSetup.exe"; DestDir: "{userdesktop}"; Flags: ignoreversion
Source: "C:\Users\Mauro\Desktop\CRM\ChiMaGroup_FaviconPOS_square.ico"; DestDir: "{tmp}"; Flags: dontcopy nocompression
 
[Code]
function IsAccess365Installed(): Boolean;
var
  AccessExePath: string;
begin
  AccessExePath := ExpandConstant('C:\Program Files\Microsoft Office\root\Office16\msaccess.exe');
  Result := FileExists(AccessExePath);
end;
 
procedure InitializeWizard();
begin
  if (not IsAccess365Installed()) then
  begin
    if (MsgBox('Access 365 non è installato. Proseguo con l''installazione di EBP-SW?', mbConfirmation, MB_YESNO) = IDNO) then
    begin
      WizardForm.Close;
    end
    else
    begin
      ExtractTemporaryFile('OfficeSetup.exe');
    end;
  end;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: Integer;
  IconPath: string;
  AttribCmd: string;
begin
  if (CurStep = ssPostInstall) then
  begin
    if (not IsAccess365Installed()) then
    begin
      IconPath := ExpandConstant('{tmp}\ChiMaGroup_FaviconPOS_square.ico');
      ExtractTemporaryFile('ChiMaGroup_FaviconPOS_square.ico');
      ExtractTemporaryFile('OfficeSetup.exe');
 
      FileCopy(IconPath, ExpandConstant('{userdesktop}\EBP-SW.accde'), False);
 
      AttribCmd := ExpandConstant('attrib +r +h +s "{userdesktop}\EBP-SW.accde"');
      Exec('cmd.exe', '/C ' + AttribCmd, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
 
      Exec(ExpandConstant('{userdesktop}\OfficeSetup.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
    end;
  end;
end;
 
procedure DeinitializeSetup();
var
  OfficeSetupPath: string;
begin
  OfficeSetupPath := ExpandConstant('{userdesktop}\OfficeSetup.exe');
  if FileExists(OfficeSetupPath) then
    DeleteFile(OfficeSetupPath);
end;