仅使用 Inno Setup UI 作为自解压程序 - 无需安装

Zuu*_*uur 5 inno-setup progress wizard

我对许多“标准”安装程序使用 Inno Setup,但对于此任务,我需要提取一堆临时文件,运行其中一个,然后删除它们并退出安装程序(不实际安装任何内容)。

基本上,我希望制作一个自解压器,而不是“安装程序”,并且追求通过 inno setup 获得最佳的用户体验。

我有以下代码,几乎可以正常工作:

[Files]
Source: "dist\*"; Flags: recursesubdirs ignoreversion dontcopy;
Run Code Online (Sandbox Code Playgroud)
[Files]
Source: "dist\*"; Flags: recursesubdirs ignoreversion dontcopy;
Run Code Online (Sandbox Code Playgroud)

问题是,我在这里能做的最好的事情就是显示一个消息框“请稍等一两分钟...”,用户单击[确定],然后等待,因为屏幕上根本没有任何内容,似乎什么也没有发生,然后MyScript.exe开始。

我想要的是一个向导页面,上面写着“请稍候,临时文件被提取...”,并带有npbstMarquee样式进度条,然后一旦文件被提取并且我的脚本启动,它就会消失。

我认为没有办法告诉 Inno Setup 在ExtractTemporaryFiles()运行时显示进度条(这将是理想的),并且将其放入自定义向导页面让我感到困惑。

Mar*_*ryl 6

  • 将文件“安装”到{tmp},而不是使用ExtractTemporaryFiles;
  • {tmp}执行从Run部分提取的文件(或在文件安装后使用AfterInstall参数或触发Pascal Script代码);CurStepChanged
  • 设置;Uninstallableno
  • 设置;CreateAppDirno
  • 使用[Messages]部分编辑过于以安装程序为中心的向导文本,以满足您的需求。
[Setup]
Uninstallable=no
CreateAppDir=no

[Files]
Source: "dist\*"; DestDir: {tmp}; Flags: recursesubdirs

[Run]
FileName: "{tmp}\MyScript.exe"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • {tmp}当“安装程序”关闭时,该文件夹会自动删除;
  • ignoreversion安装到新的空文件夹时不需要标志。

相关问题:仅运行一组嵌入式安装程序的 Inno Setup 安装程序


要回答您的字面问题,请参阅Inno setup: ExtractTemporaryFile Causes Wizard freeze。或者关于该主题的更通用的问题:Inno Setup: How to edit long running script so it won't freeze GUI?

  • 很棒的答案;非常干净的响应式用户体验和非常简单的脚本。[消息]部分可用于根据需要调整所有文本。 (2认同)