在临时文件夹中创建一个文件夹

时间:2018-08-16 13:21:02

标签: inno-setup pascalscript

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

这是我尝试在temp文件夹中创建文件夹的方式。

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

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

该脚本编译并运行为可以预期,但是即使该文件夹说它在日志文件中也没有创建,该文件夹也不会创建,

我知道该日志文件会说这是因为它也告诉您,但是,如果该文件夹无法被创建,它会崩溃吗?或如果存在if语句,则返回false?

2 个答案:

答案 0 :(得分:4)

使用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}全部与Inno Setup Temp文件夹 is-XXXXX.tmp
    有关 C:\ Users \ ... \ AppData \ Local \ Temp \ is-XXXXX.tmp
  • {%temp}是用户的Temp文件夹
    C:\ Users \ ... \ AppData \ Local \ Temp

答案 1 :(得分:0)

我认为您需要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.');