Inno Setup-使用进度条在自定义页面上复制文件

霍尔特

我目前正在开发一个用于更新我们公司软件的程序。

我让用户在“ CreateInputDirPage”中选择已安装程序的位置和备份位置。

目前,我正在为两个目录的选择创建一个掩码:

SelectPathPage := CreateInputDirPage(PreviousPageId, 'Text 1', 'Text 2.', 'Text 3', False, 'New Folder'); SelectPathPage.Add('Path to company program'); SelectPathPage.Add('Path to backup folder');

然后,如果第一个Folder indead保存了我们公司的程序,我将使用现有文件进行验证。现在,我要将第一个选择复制到备份文件夹中的新子文件夹中。

我从另一个复制文件的问题中找到了以下示例代码DirectoryCopy(SelectPathPage.Values[0], SelectPathPage.Values[1]);

似乎可以使用“ NextButtonClick”功能。

在带有进度条的“ SelectPathPage” -Mask之后,如何在单独的蒙版上复制文件夹和文件夹的内容,并在复制完成后使下一个按钮可用。它应类似于带有进度条的“安装”面具。甚至可以在Inno Setup的自定义蒙版中创建类似的内容?

提前致谢

马丁·普里克里(Martin Prikryl)

使用CreateOutputProgressPage创建进度页面。

并修改“在Inno设置中复制隐藏文件”中DirectoryCopy功能以使页面上的进度前进。

要计算总大小(以设置进度条的最大值),Inno Setup中的代码需要GetDirSize功能获取包含子目录的目录大小

[Code]

const
  ProgressRatio = 1024;

procedure DirectoryCopyWithProgress(
  SourcePath, DestPath: string; ProgressPage: TOutputProgressWizardPage);
var
  FindRec: TFindRec;
  SourceFilePath: string;
  DestFilePath: string;
  Size: Int64;
begin
  if FindFirst(SourcePath + '\*', FindRec) then
  begin
    try
      repeat
        if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
        begin
          SourceFilePath := SourcePath + '\' + FindRec.Name;
          DestFilePath := DestPath + '\' + FindRec.Name;
          ProgressPage.SetText(SourceFilePath, DestFilePath);
          if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
          begin
            Size := Int64(FindRec.SizeHigh) shl 32 + FindRec.SizeLow;
            if FileCopy(SourceFilePath, DestFilePath, False) then
            begin
              Log(Format('Copied %s to %s with %s bytes', [
                SourceFilePath, DestFilePath, IntToStr(Size)]));
            end
              else
            begin
              Log(Format('Failed to copy %s to %s', [SourceFilePath, DestFilePath]));
            end;
          end
            else
          begin
            Size := 0;
            if DirExists(DestFilePath) or CreateDir(DestFilePath) then
            begin
              Log(Format('Created %s', [DestFilePath]));
              DirectoryCopyWithProgress(SourceFilePath, DestFilePath, ProgressPage);
            end
              else
            begin
              Log(Format('Failed to create %s', [DestFilePath]));
            end;
          end;

          Size := Size / ProgressRatio;
          ProgressPage.SetProgress(
            ProgressPage.ProgressBar.Position + Longint(Size),
            ProgressPage.ProgressBar.Max);
        end;
      until not FindNext(FindRec);
    finally
      FindClose(FindRec);
    end;
  end
    else
  begin
    Log(Format('Failed to list %s', [SourcePath]));
  end;
end;

function SelectPathPageNextButtonClick(Sender: TWizardPage): Boolean;
var
  SourcePath: string;
  DestPath: string;
  ProgressPage: TOutputProgressWizardPage;
  TotalSize: Longint;
begin
  ProgressPage := CreateOutputProgressPage('Copying files...', '');
  SourcePath := TInputDirWizardPage(Sender).Values[0];
  DestPath := TInputDirWizardPage(Sender).Values[1];
  TotalSize := GetDirSize(SourcePath) / ProgressRatio;
  Log(Format('Total size is %s', [IntToStr(TotalSize)]));
  ProgressPage.SetProgress(0, TotalSize);
  ProgressPage.Show;
  try
    DirectoryCopyWithProgress(SourcePath, DestPath, ProgressPage);
  finally
    ProgressPage.Hide;
    ProgressPage.Free;
  end;
  Result := True;
end;

procedure InitializeWizard();
var
  SelectPathPage: TInputDirWizardPage;
begin
  SelectPathPage :=
    CreateInputDirPage(wpSelectDir, 'Text 1', 'Text 2.', 'Text 3', False, 'New Folder');
  SelectPathPage.Add('Path to company program');
  SelectPathPage.Add('Path to backup folder');
  SelectPathPage.OnNextButtonClick := @SelectPathPageNextButtonClick;
end;

在此处输入图片说明

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Inno Setup的自定义页面向导

来自分类Dev

wpFinished页面上的Inno Setup替换按钮

来自分类Dev

Inno Setup中较大的“选择组件”页面

来自分类Dev

在Inno-Setup中使用自定义DLL

来自分类Dev

下次执行Inno Setup制作的安装程序时,在自定义页面上恢复先前输入的数据

来自分类Dev

Inno Setup语言对话框自定义

来自分类Dev

Inno Setup“安装完成”向导页面

来自分类Dev

Inno Setup禁用安装向导页面

来自分类Dev

Inno Setup:“就绪页面”自定义布局

来自分类Dev

在Inno Setup中复制隐藏文件

来自分类Dev

从Dephi DLL更新Inno Setup进度栏

来自分类Dev

Inno Setup在wpPreparing页面上放置控件

来自分类Dev

Inno Setup:自定义类

来自分类Dev

Inno Setup:创建自定义表单

来自分类Dev

如何使用RichEditViewer在Inno Setup中向自定义页面添加可点击链接?

来自分类Dev

为什么在Inno Setup中未选中自定义页面上的单选按钮?

来自分类Dev

如何在Inno Setup中将自定义页面上的单选控件分成两个不同的组?

来自分类Dev

当窗口调整为最小尺寸时(在Inno Setup上),TLabel控件会在自定义页面上裁剪

来自分类Dev

使用Inno Setup包含注册表,自定义消息和代码文件的正确方法

来自分类Dev

安装后执行批处理文件,并在Inno Setup中“完成”页面之前的自定义页面上显示其输出

来自分类Dev

Inno Setup使用Pascal脚本自定义FinishedLabel

来自分类Dev

Inno Setup的自定义页面向导

来自分类Dev

在Inno Setup中:如何使用/了解自定义页面的CurPageIDs的值?

来自分类Dev

使用Google Map的Inno Setup自定义页面

来自分类Dev

Inno Setup:自定义类

来自分类Dev

使 Inno Setup 自动将自定义页面中的数据添加到 .inf 文件

来自分类Dev

Inno Setup:自定义页面选择更新或删除/卸载

来自分类Dev

Inno Setup - 创建自定义消息框(是/否)

来自分类Dev

禁止 Inno Setup 自定义页面上的空白和仅空格输入

Related 相关文章

  1. 1

    Inno Setup的自定义页面向导

  2. 2

    wpFinished页面上的Inno Setup替换按钮

  3. 3

    Inno Setup中较大的“选择组件”页面

  4. 4

    在Inno-Setup中使用自定义DLL

  5. 5

    下次执行Inno Setup制作的安装程序时,在自定义页面上恢复先前输入的数据

  6. 6

    Inno Setup语言对话框自定义

  7. 7

    Inno Setup“安装完成”向导页面

  8. 8

    Inno Setup禁用安装向导页面

  9. 9

    Inno Setup:“就绪页面”自定义布局

  10. 10

    在Inno Setup中复制隐藏文件

  11. 11

    从Dephi DLL更新Inno Setup进度栏

  12. 12

    Inno Setup在wpPreparing页面上放置控件

  13. 13

    Inno Setup:自定义类

  14. 14

    Inno Setup:创建自定义表单

  15. 15

    如何使用RichEditViewer在Inno Setup中向自定义页面添加可点击链接?

  16. 16

    为什么在Inno Setup中未选中自定义页面上的单选按钮?

  17. 17

    如何在Inno Setup中将自定义页面上的单选控件分成两个不同的组?

  18. 18

    当窗口调整为最小尺寸时(在Inno Setup上),TLabel控件会在自定义页面上裁剪

  19. 19

    使用Inno Setup包含注册表,自定义消息和代码文件的正确方法

  20. 20

    安装后执行批处理文件,并在Inno Setup中“完成”页面之前的自定义页面上显示其输出

  21. 21

    Inno Setup使用Pascal脚本自定义FinishedLabel

  22. 22

    Inno Setup的自定义页面向导

  23. 23

    在Inno Setup中:如何使用/了解自定义页面的CurPageIDs的值?

  24. 24

    使用Google Map的Inno Setup自定义页面

  25. 25

    Inno Setup:自定义类

  26. 26

    使 Inno Setup 自动将自定义页面中的数据添加到 .inf 文件

  27. 27

    Inno Setup:自定义页面选择更新或删除/卸载

  28. 28

    Inno Setup - 创建自定义消息框(是/否)

  29. 29

    禁止 Inno Setup 自定义页面上的空白和仅空格输入

热门标签

归档