This is an old revision of the document!


ezFIT Optimizer (for Clarujust) Installation

Installing Clarujust Proxy Files

;//----------------------------------------------------------------------------
;// Inno-script: clarujust-proxy-setup.iss
;//----------------------------------------------------------------------------
;//----------------------------------------------------------------------------
;// Global Defines
;//----------------------------------------------------------------------------
#define DefaultAppPath "Audina\ezFITOptimizer\"
...
 
;//----------------------------------------------------------------------------
;// Setup section
;//----------------------------------------------------------------------------
[Setup]
DefaultDirName={param:AppPath|{pf}\{#DefaultAppPath}}
...
 
[Files]
...
;//---------------------------------------------------
;// Clarujust files
;//---------------------------------------------------
Source: ..\ClarujustProxy\MockClarujustApp.dll; DestDir: {app}\Clarujust; Flags: ignoreversion
Source: ..\ClarujustProxy\ClarujustProxyServer.dll; DestDir: {app}\Clarujust; Flags: ignoreversion
;Source: ..\ClarujustProxy\ClarujustProxyServer.tlb; DestDir: {app}\Clarujust; Flags: ignoreversion
Source: ..\ClarujustProxy\Interop.EzFITOptimizerSvr.dll; DestDir: {app}\Clarujust; Flags: ignoreversion
...
 
[Run]
; RegAsm path: {win}\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
Filename: {dotnet20}\RegAsm.exe; Parameters: ClarujustProxyServer.dll /codebase /silent; WorkingDir: {app}\Clarujust\; Flags: skipifdoesntexist runhidden
...
 
[UninstallRun]
; RegAsm path: {win}\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
Filename: {dotnet20}\RegAsm.exe; Parameters: ClarujustProxyServer.dll /unregister; WorkingDir: {app}\Clarujust\; Flags: skipifdoesntexist runhidden
...

ezFIT Installer Executing Clarujust Installer

ezFIT installer would call the Clarujust installer and provide the ezFIT installation path, so that Clarujust can install itself relative to that path. This information is better provided during installation as a command-line parameter rather than reading the Windows Registry, since some of those entries might not have been created or updated yet.

Script Sample

Calling Clarujust Inno-setup script with a parameter AppPath to let it know the ezFIT path:

;//----------------------------------------------------------------------------
;// Inno-script: ezfit-clarujust-setup.iss
;//----------------------------------------------------------------------------
...
[Files]
;//---------------------------------------------------
;// Application files
;//---------------------------------------------------
Source: {src}\clarujust-setup.exe; DestDir: {src}; Flags: ignoreversion external skipifsourcedoesntexist dontcopy
...
 
[Run]
Filename: {src}\clarujust-setup.exe;  Parameters: /AppPath={app}; Description: {cm:LaunchProgram,clarujust-setup.exe}; Flags: skipifdoesntexist
...

Clarujust Inno-setup script using the AppPath command-line parameter to set target installation path for Clarujust:

;//----------------------------------------------------------------------------
;// Inno-script: clarujust-setup.iss
;//----------------------------------------------------------------------------
 
;//----------------------------------------------------------------------------
;// Global Defines
;//----------------------------------------------------------------------------
#define DefaultAppPath "Audina\ezFITOptimizer\"
...
 
;//----------------------------------------------------------------------------
;// Setup section
;//----------------------------------------------------------------------------
[Setup]
;DefaultDirName={code:GetAppPath}\Clarujust
DefaultDirName={param:AppPath|{pf}\{#DefaultAppPath}\Clarujust}
...
 
[Files]
;//---------------------------------------------------
;// Clarujust files
;//---------------------------------------------------
Source: ..\ClarujustProxy\MockClarujustApp.dll; DestDir: {app}; Flags: ignoreversion
Source: ..\ClarujustProxy\ClarujustProxyServer.dll; DestDir: {app}; Flags: ignoreversion
Source: ..\ClarujustProxy\ClarujustProxyServer.tlb; DestDir: {app}; Flags: ignoreversion
Source: ..\ClarujustProxy\Interop.EzFITOptimizerSvr.dll; DestDir: {app}; Flags: ignoreversion
...
 
[Run]
Filename: {dotnet20}\RegAsm.exe; Parameters: ClarujustProxyServer.dll /codebase /silent; WorkingDir: {app}; Flags: skipifdoesntexist runhidden
...
 
[UninstallRun]
Filename: {dotnet20}\RegAsm.exe; Parameters: ClarujustProxyServer.dll /unregister; WorkingDir: {app}; Flags: skipifdoesntexist runhidden
 
[Code]
//----------------------------------------------------------------------------
// function prototypes
//----------------------------------------------------------------------------
function  GetAppPath(): string; forward;
...
 
//----------------------------------------------------------------------------
// description: get the applicaton path sent by command-line param /AppPath
// parameters : void
// return     : pth (string)
//----------------------------------------------------------------------------
function GetAppPath(): string;
var
  pth: string;
begin
    // ezFIT installer will pass ezFIT's target path to the Clarujust installer (as a command line parameter).
    // We get this parameter and extract the path to determine where Clarujust will be installed.  
    // InnoSetup receives it as Param 2.
    // For example: Param 1 = /SL5="$2074A,72847574,53248,D:\...\innosetup\output\ezfit-setup.exe"
    //              Param 2 = /ezfitpath="C:\Program Files\Audina\ezFIT4"
    pth := ExpandConstant('{param:AppPath|{pf}\{#DefaultAppPath}}');
    Log('GetAppPath(): pth=['+pth+']');
    result := pth;
end;

Clarujust Installer Executing ezFIT Installer

The ezFIT installer already creates a Windows registry entry that can bed use for querying its version and installation path: For ezFIT Stand-alone:

HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\Product Path
HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\Version

Example:

  • Product Path: C:\Program Files\Audina\ezFIT4
  • Version: 4.212009102701

For ezFIT for Noah:

HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\Noah Product Path
HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\ezFIT NOAH Version

Example:

  • Noah Product Path: C:\PROGRA~1\HIMSA\Modules\Fitting\044
  • ezFIT NOAH Version: 4.212009102701

The Clarujust installer should probably check that ezFIT has been installed (by checking the path and version in the Windows registry), and then it can proceed with the installation.

Sample Script

This sample script shows how to check if ezFIT (Stand-alone) is installed on the system, and if it is not, then we install it. It also describes how to get the installation path from the Windows registry. Please note, a similar logic needs to be implemented for the ezFIT for Noah version.

[Files]
;---------------------------------------------------
; Application files
;---------------------------------------------------
Source: {src}\ezfit-setup.exe; DestDir: {src}; Flags: ignoreversion external skipifsourcedoesntexist dontcopy; Languages: 
...
 
[Run]
Filename: {src}\ezfit-setup.exe; Description: {cm:LaunchProgram,ezfit.exe}; Flags: skipifdoesntexist; Check: NoValidEzFitExists 
...
 
[Code]
//----------------------------------------------------------------------------
// Function prototypes
//----------------------------------------------------------------------------
function GetEzfitPath(): string; forward;
function GetEzfitVersion(): string; forward;
function NoValidEzFitExists(ValidVer: string): Boolean; forward;
...
 
//----------------------------------------------------------------------------
// description: get the correct ezFIT path (installation dir).
// parameters : void
// return     : pth (string)
//----------------------------------------------------------------------------
function GetEzfitPath(): string;
var
  pth: string;
begin
  // Registry: HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\Product Path
  RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Audina Hearing Instruments\ezFIT\4.0\Setup\', 'Product Path', pth);
  if trim(pth) <> '' then begin
    if DirExists(pth) then begin
       pth := trim(pth);
       if ForceDirectories(pth) then begin
         Log('GetEzfitPath(): created dir pth=['+pth+']');
       end else begin
         Log('GetEzfitPath(): not created dir pth=['+pth+']');
       end;
    end;
  end else begin
    Log('GetEzfitPath(): ezFIT not installed in this system.');
  end;
 
  result := pth;
end;
 
//----------------------------------------------------------------------------
// description: get the current ezFIT version.
// parameters : void
// return     : ver (string)
//----------------------------------------------------------------------------
function GetEzfitVersion(): string;
var
  ver: string;
begin
  // Registry: HKEY_LOCAL_MACHINE\Software\Audina Hearing Instruments\ezFIT\4.0\Setup\Version
  RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Audina Hearing Instruments\ezFIT\4.0\Setup\', 'Version', ver);
  if trim(ver) <> '' then begin
     Log('GetEzfitVersion(): ezFIT ver=['+ver+']');
  end else begin
     Log('GetEzfitVersion(): ezFIT not installed');
  end;
 
  result := ver;
end;
 
//----------------------------------------------------------------------------
// description: Verify there is no prior valid ezFIT installation in system.
//  If there is a valid installation, we do not reinstall ezFIT, that is why
//  we check for no valid install in order to execute ezFIT installer.
// parameters : void
// return     : T if no valid installation, F if there is a valid installation
//----------------------------------------------------------------------------
function NoValidEzFitExists(ValidVer: string): Boolean; 
var
  curBuild, validBuild: integer;
begin
  result := False;  // A valid ezFIT install exists already
  if GetEzfitPath() <> '' then begin
     curBuild   := StrToInt(copy(GetEzfitVersion(), 2, 10));
     validBuild := StrToInt(copy(ValidVer, 2, 10));
     if StrToFloat(curBuild) < (validBuild) then begin
       result := True;  // No valid ezFIT install exists
     end;
  end;
end;