【问题标题】:Creating A Folder In the Temp Folder在临时文件夹中创建文件夹
【发布时间】:2018-08-16 13:21:02
【问题描述】:
我正在尝试在临时文件夹中创建一个没有随机名称的文件夹。
这是我尝试在临时文件夹中创建文件夹的方式。
if not DirExists(ExpandConstant('{%tmp}\Utilities\SDK')) then
CreateDir(ExpandConstant('{%tmp}\Utilities\SDK'));
Log('Temp\Utilities\SDK Folder Has Been Created.');
我查看了this 线程,但不幸的是,即使使用%,它仍然没有创建文件夹。
脚本按预期编译和运行,但是文件夹没有'即使它说它在日志文件中也不要创建,
我知道日志文件会这样说,因为它也被告知,但是,如果无法创建文件夹,它不会崩溃吗?或者如果存在 if 语句则返回 false?
【问题讨论】:
标签:
inno-setup
pascalscript
【解决方案1】:
使用CreateDir(),您必须一个接一个地创建目录,而不是一次创建目录结构。
if not DirExists(ExpandConstant('{tmp}\Utilities')) then
CreateDir(ExpandConstant('{tmp}\Utilities'));
if not DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
CreateDir(ExpandConstant('{tmp}\Utilities\SDK'));
if DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
Log('Temp\Utilities\SDK Folder Has Been Created.') else
Log('Temp\Utilities\SDK Folder ERROR : NOT Created.');
Inno Setup 具有一次创建目录结构的功能
function ForceDirectories(Dir: string): Boolean;
示例:
if not DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
ForceDirectories(ExpandConstant('{tmp}\Utilities\SDK'));
还要记住:
- {tmp} all 与 Inno Setup Temp 文件夹相关is-XXXXX.tmp
C:\Users\...\AppData\Local\Temp\is-XXXXX.tmp
- {%temp} 是用户临时文件夹
C:\Users\...\AppData\Local\Temp
【解决方案2】:
我认为您需要 Windows Temp 而不是 InnoSetup 中的 tmp
{tmp}:
安装程序或卸载程序使用的临时目录。这不是用户的 TEMP 环境变量的值。它是由安装程序或卸载程序在启动时创建的用户临时目录的子目录(名称类似于“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。 当安装程序或卸载程序退出时,此目录中的所有文件和子目录都将被删除。 在安装程序期间,这主要用于提取要在 [运行] 部分执行但在运行后不需要的文件安装。
所以我认为你想这样做:
if not DirExists(ExpandConstant('{%temp}\Utilities\SDK')) then
CreateDir(ExpandConstant('{%temp}\Utilities\SDK'));
Log('Temp\Utilities\SDK Folder Has Been Created.');