2

私が持っているタスクセクションの下に

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \
    GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "installFolder"; Description: "Install project folder."; \
    GroupDescription:" folder";

セクションには、Filesこの特定のフォルダーがあります

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; \
    Flags: createallsubdirs recursesubdirs ignoreversion; 

私の目的は、チェックされたボタンをテストしてから、フォルダーをインストールするディレクトリを要求するウィンドウを表示することです。

if WizardForm.TasksList.Checked[3] then
  GetDataDir;

これは、ページを作成したり、ディレクトリを取得するための 1 つのページを作成したりする必要なく実行できますか? また、オプションであり、デフォルトの場所とは異なる場所にインストールされる余分なファイルを処理するのにこれは良い方法{app}ですか?

これまでのところ、私にとって紛らわしい部分は、すべてがコンパイルされたときであり、GetDataDirタスクを選択するページの前に が呼び出されています。ディレクトリを選択すると、インストールするかどうかを尋ねられます。GetDataDir後で発生させる方法がわかりません。

4

2 に答える 2

2

Inno Setup のウィザード モデルは、常にウィザード ページを作成する必要があることを意味しますが、表示する必要のないページはスキップできます。

これは、ShouldSkipPage()イベント関数で次のように呼び出すことで実行できIsTaskSelected()ます。

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID = InstallFolderPage.ID) and not IsTaskSelected('installFolder') then
    Result := True
  else
    Result := False
end;

この場合、1 つのチェックだけで、次のように短縮できます。

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := (PageID = InstallFolderPage.ID) and not IsTaskSelected('installFolder')
end;

TLamaが言ったように、関数で特別なことをする必要はなく、{code:...}適切な値を直接返すだけです。

于 2013-11-19T11:09:30.807 に答える
0

'; を追加するだけです。Tasks: installFolder' を Source... 行の最後に追加すると、タスクが選択されていない限り呼び出されません。

Source: "C:\\Output\LEA\*.*"; DestDir: {code:GetDataDir}; Flags: createallsubdirs recursesubdirs ignoreversion; Tasks: installFolder
于 2014-10-28T15:16:56.173 に答える