如何在 ExtractTemporaryFile 中使用多个同名文件?

How do I use multiple files with the same name with ExtractTemporaryFile?

InnoSetup 有一个功能 ExtractTemporaryFile 可以临时提取文件而不是安装它)。例如。在安装过程中提取和 运行 第三方安装程序。

这个函数只需要一个文件名,所以如果有多个同名文件你想这样处理,它是行不通的。

如何在不重命名源文件的情况下处理这个问题?

已经answered on the InnoSetup user voice forum:

  1. 问题是,InnoSetup 不知道文件的完整源路径,它只有一个带有目的地的文件列表。
  2. 虽然 ExtractTemporaryFile 目前无法通过目标目录区分,但可以重命名 DestName 以便在不重命名源目录的情况下区分文件:

示例:

; 2005 redist
Source: Source\Redist\vcredist_x86.exe; Flags: dontcopy
; 2010 redist 
Source: Source\Redist10\vcredist_x86.exe; DestName: vcredist_x86_2010.exe; Flags: dontcopy

稍后您可以引用唯一的文件名,而无需将输入重命名为设置。

完整学分转至 dave


当你有最新的 Inno Setup 版本时,还有 ExtractTemporaryFile*s*,它可以通过目标目录使用通配符,所以方法是:

[Files]
Source: Source\Redist\*.*; DestDir: redist_bundle; Flags: dontcopy recursesubdirs

[Code]
...
ExtractTemporaryFiles('redist_bundle\*');
//                _-^-_

这会将 Redist 源下的子树提取到 inno 的临时目录中。请注意,我在 DestDir 中省略了任何 {app}{tmp} 常量,随后在 Extract.. 函数中也省略了。

这样,文件将被提取为,例如

...
[12:16:32,105]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\ucrt-redist-10586\Windows6.1-KB3118401-x64.msu
[12:16:32,145]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2005\vcredist_x86.exe
[12:16:32,167]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2010\vcredist_x64.exe
[12:16:32,230]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2010\vcredist_x86.exe
[12:16:32,279]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2013\vcredist_x64.exe
[12:16:32,318]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2013\vcredist_x86.exe
[12:16:32,358]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2015\vc_redist.x64.exe
[12:16:32,437]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2015\vc_redist.x86.exe
[12:16:32,512]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2017\vc_redist.x64.exe
[12:16:32,591]   Extracting temporary file: C:\Users\me\AppData\Local\Temp\is-xyz.tmp\redist_bundle\vcredist-2017\vc_redist.x86.exe