如何在 ExtractTemporaryFile 中使用多个同名文件?
How do I use multiple files with the same name with ExtractTemporaryFile?
InnoSetup 有一个功能 ExtractTemporaryFile
可以临时提取文件而不是安装它)。例如。在安装过程中提取和 运行 第三方安装程序。
这个函数只需要一个文件名,所以如果有多个同名文件你想这样处理,它是行不通的。
如何在不重命名源文件的情况下处理这个问题?
已经answered on the InnoSetup user voice forum:
- 问题是,InnoSetup 不知道文件的完整源路径,它只有一个带有目的地的文件列表。
- 虽然
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
InnoSetup 有一个功能 ExtractTemporaryFile
可以临时提取文件而不是安装它)。例如。在安装过程中提取和 运行 第三方安装程序。
这个函数只需要一个文件名,所以如果有多个同名文件你想这样处理,它是行不通的。
如何在不重命名源文件的情况下处理这个问题?
已经answered on the InnoSetup user voice forum:
- 问题是,InnoSetup 不知道文件的完整源路径,它只有一个带有目的地的文件列表。
- 虽然
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