7

アップグレードのコンポーネント ページを無効にする方法はありますか? ソフトウェアのアップグレードを有効にしたいのですが、アップグレードの際にユーザーがコンポーネントの選択を変更できるようにしたくありません。インストーラーの代わりに、最初のインストールからすべての既存のコンポーネントをアップグレードします。

アップグレード中にユーザーがより少ないコンポーネントを選択すると、不足しているコンポーネントが古いバージョンとしてインストールされたままになり、混乱するのではないかと心配しています。

スクリプトに次を追加しました。

[Setup]
DisableDirPage=auto
DisableProgramGroupPage=auto
DirExistsWarning=auto

コンポーネント ページを無効にして、以前のインストール (フル インストール) の選択をアップグレードに使用する方法が必要なだけです。それは可能ですか?

関連するディレクティブを見つけました:

[Setup]
UsePreviousTasks=true

UsePreviousTasks良いレジストリから既存のセクションを読み込んでいます。ここで、選択ウィンドウを非表示にする方法を見つける必要があります。

ありがとう、
ヴォルフガング

4

3 に答える 3

11

ユーザーからページを非表示にするには、ShouldSkipPageイベント メソッドを使用します。このメソッドで True を返すと、ページはユーザーに表示されません。False の場合、ページは通常どおり表示されます。インストールがアップグレードであるかどうかを確認する方法の例を次に示します。アップグレードである場合は、[コンポーネントの選択] ウィザード ページをスキップします。

[Setup]
AppId=B75E4823-1BC9-4AC6-A645-94027A16F5A5
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

; here is the place for your [Components] section and the rest of your script
[Code]
const
  UninstallKey = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppId")}_is1';

function IsUpgrade: Boolean;
var
  Value: string;
begin
  Result := (RegQueryStringValue(HKLM, UninstallKey, 'UninstallString', Value) or
    RegQueryStringValue(HKCU, UninstallKey, 'UninstallString', Value)) and (Value <> '');
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := (PageID = wpSelectComponents) and IsUpgrade;
end;

あなたが言及した別のオプションは、ページのすべてのコントロールを無効にすることです。次のスクリプトは、前のスクリプトと同様に、インストールがアップグレードであるかどうかを確認する方法を示しています。アップグレードである場合は、[コンポーネントの選択] ウィザード ページのすべてのコントロールを無効にします。

[Setup]
AppId=B75E4823-1BC9-4AC6-A645-94027A16F5A5
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

; here is the place for your [Components] section and the rest of your script
[Code]
const
  UninstallKey = 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppId")}_is1';

function IsUpgrade: Boolean;
var
  Value: string;
begin
  Result := (RegQueryStringValue(HKLM, UninstallKey, 'UninstallString', Value) or
    RegQueryStringValue(HKCU, UninstallKey, 'UninstallString', Value)) and (Value <> '');
end;

procedure DisablePageControls(Page: TNewNotebookPage);
var
  I: Integer;
begin
  Page.Enabled := False;
  for I := 0 to Page.ControlCount - 1 do
    Page.Controls[I].Enabled := False;
end;

procedure InitializeWizard;
begin
  if IsUpgrade then
    DisablePageControls(WizardForm.SelectComponentsPage);
end;
于 2013-08-30T10:51:47.523 に答える
0

そんな感じ:

if CurPageID=wpSelectComponents then
 begin
  if ExtraOptionAvailable() then
  begin
    Wizardform.ComponentsList.Checked[6] := true;
    Wizardform.ComponentsList.ItemEnabled[6] := true;
  end else begin
    Wizardform.ComponentsList.Checked[6] := false;
    Wizardform.ComponentsList.ItemEnabled[6] := false;
  end;
end;
于 2013-08-30T09:33:27.673 に答える