Inno setup 在临时文件夹中创建文件夹

Inno setup 在临时文件夹中创建文件夹,inno-setup,pascalscript,Inno Setup,Pascalscript,我正在尝试在临时文件夹中创建一个没有随机名称的文件夹。 下面是我如何尝试在临时文件夹中创建文件夹 if not DirExists(ExpandConstant('{%tmp}\Utilities\SDK')) then CreateDir(ExpandConstant('{%tmp}\Utilities\SDK')); Log('Temp\Utilities\SDK Folder Has Been Created.'); 我查看了线程,但即使使用%,不幸的是,它仍然没有创建文

我正在尝试在临时文件夹中创建一个没有随机名称的文件夹。

下面是我如何尝试在临时文件夹中创建文件夹

if not DirExists(ExpandConstant('{%tmp}\Utilities\SDK')) then
    CreateDir(ExpandConstant('{%tmp}\Utilities\SDK'));
    Log('Temp\Utilities\SDK Folder Has Been Created.');

我查看了线程,但即使使用
%
,不幸的是,它仍然没有创建文件夹。

脚本按照预期编译和运行,但是文件夹没有创建,即使它在日志文件中说它有,

我理解日志文件会这样说,因为它也告诉了我,如果无法创建文件夹,它会崩溃吗?或者,如果存在if语句,则返回false?

我想您需要的是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.');

使用
CreateDir()
必须一个接一个地创建dir,而不是一次创建dir结构。

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安装程序具有立即创建目录结构的功能
函数ForceDirectories(Dir:string):布尔值

示例:

if not DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
   ForceDirectories(ExpandConstant('{tmp}\Utilities\SDK'));
还要记住:

if not DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
   ForceDirectories(ExpandConstant('{tmp}\Utilities\SDK'));
  • {tmp}所有都与Inno设置临时文件夹相关is-XXXXX.tmp
    C:\Users\…\AppData\Local\Temp\is-XXXXX.tmp
  • {%temp}是用户临时文件夹
    C:\Users\…\AppData\Local\Temp