2016-04-26 56 views
1

データベースをインストールするためにInno Setupでインストーラを作成しました。私のスクリプト作成スキルは非常に基本的です。今すぐアップデートを提供する必要があり、インストーラが必要です:新規インストールかアップデートかによって、Inno Setupインストーラでセットアップタイプを変更しますか?

  1. 既存のインストールがあるかどうかを確認してください。
  2. 既存のインストールが古いかどうかを確認します。
  3. 既存のインストールがある場合は[オプションとして更新]を、提供しない場合はオプションとして管理データベースまたは一般データベース(新規インストール)を提供します。

以下のコードを組み合わせて、ドロップダウン/コンボボックスの3つのオプションを示しています。私はwpSelectComponentsページでコンボボックスで提供されるオプションを変更する方法を理解できません。

[Code] 
function InitializeSetup(): Boolean; 
var 
    OldVersion, NewVersion: String; 
begin 
    Result := True; 

    //Check in the registry for the uninstaller of PME Database. Compare version, exit if installed version is the same or newer. 
    if RegKeyExists(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{pmedatabase201}}_is1') then 
    begin 
     RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{pmedatabase201}}_is1', 'DisplayVersion', OldVersion) 
     NewVersion := '{#MyAppVersion}' 
     If NewVersion < OldVersion then 
     begin 
      MsgBox(('This version (' + NewVersion + ') is older than the installed version (' + OldVersion +') - setup will close.'), mbError, MB_Ok) 
      Result := False; 
      exit; 
     end; 
     If NewVersion = OldVersion then 
     begin 
      MsgBox(('This version (' + NewVersion + ') is the same as the installed version - setup will close.'), mbError, MB_Ok) 
      Result := False; 
      exit; 
     end; 
     If NewVersion > OldVersion then 
     begin 
      if MsgBox(('The database will be updated from version ' + OldVersion + ' to version ' + NewVersion + '.' + chr(13) + chr(13) + 'Continue?'), mbInformation, MB_YesNo) = idNo then 
      begin 
       Result := False; 
       exit; 
      end; 
     end; 
    end; 
...more code, to check Windows/Office versions... 

[Code] 
Procedure CurPageChanged(CurPage: Integer); 
begin 
    if CurPage = wpSelectComponents then 
    begin 
     if RegKeyExists(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{pmedatabase201}}_is1') then 
     begin 
//Do something: only show Update as combobox option - HOW??? 
     end else begin 
//Do something: only show Admin and General as combobox options - HOW??? 
     end; 
    end; 
end; 

[Types] 
Name: "Other1"; Description: "General Database"; Languages: en 
Name: "Admin1"; Description: "Administrator Database"; Languages: en 
Name: "Update1"; Description: "Database update"; Languages: en 
Name: "Other2"; Description: "Base de Données Générale"; Languages: fr 
Name: "Admin2"; Description: "Base de Données de L'administrateur"; Languages: fr 
Name: "Update2"; Description: "Mise à jour de Base de Données"; Languages: fr 
Name: "Other3"; Description: "Base de Dados Geral"; Languages: pt 
Name: "Admin3"; Description: "Base de Dados do Administrador"; Languages: pt 
Name: "Update3"; Description: "Atualização da Base de Dados"; Languages: pt 

[Components] 
Name: "General"; Description: "General"; Types: other1 other2 other3; Flags: fixed disablenouninstallwarning 
Name: "Admin"; Description: "Admin"; Types: admin1 admin2 admin3; Flags: fixed disablenouninstallwarning 
Name: "Update"; Description: "Update"; Types: update1 update2 update3; Flags: fixed disablenouninstallwarning 

[Files] 
; Database files. 
Source: "C:\PME SETUP\pme versions\v2.02\PME Database.accde"; DestDir: "{app}"; Components: admin general update 
; Data files are ONLY copied for a new installation of the central administrator database. 
Source: "C:\PME SETUP\pme versions\v2.02\PME Data Storage.accdb"; DestDir: "{app}"; Components: admin 
Source: "C:\PME SETUP\pme versions\v2.02\PME Data Storage.accdb"; DestDir: "{app}\System Files"; Components: admin 
Source: "C:\PME SETUP\pme versions\v2.02\PME Data Storage.accdb"; DestDir: "{app}\Exchange"; Components: admin 
...more follows for different component-combinations... 
+0

タイプのローカライズには、それらを複製することによって完全に間違っていることに注意してください。これについて新しい質問をすることを検討してください。 –

答えて

0

あなたはCheck parameterを探しています:アプリケーションが既にインストールされている場合は、決定するためにあまりにもHKEY_LOCAL_MACHINEをチェックする必要があります

[Types] 
Name: "Other"; Description: "General Database"; Check: not IsUpdate 
Name: "Admin"; Description: "Administrator Database"; Check: not IsUpdate 
Name: "Update"; Description: "Database update"; Check: IsUpdate 

[Code] 

function IsUpdate: Boolean; 
begin 
    Result := 
    RegKeyExists(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{pmedatabase201}}_is1') and 
    /*IsNewer*/; 
end; 

注意。

+0

申し訳ありません、私の初めてのここです。 RegKeyExistsは動作します。 }}}おそらくAppIdが{{pmedatabase201}}であるためです(私にはなぜそれは尋ねないでください - すべてが混乱している早い段階からです)。チェックには効果があります。ドロップダウンリストに特定のコンポーネントは表示されません。 – Oscar

+1

もう一度Martinに感謝します。私は「Check:IsUpdate」と「Check:IsUpdateではない」を間違った場所、「Types」ではなく「Components」に入れました。それを修正し、それは動作します:既存のインストールがあるかどうかをレジストリから読み取ります。レジストリからバージョンを読み取り、比較します。場合によっては、適切な「アップデート」または「新規インストール」セットアップタイプを表示します。 – Oscar

関連する問題