Search code examples
inno-setuppascalscript

Creating A Folder In the Temp Folder


I'm trying to create a folder within the temp folder that doesn't have a random name.

Here is how I was trying to create the folder within the temp folder.

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

I had a look at this thread, but even with the %, unfortunately, it still doesn't create the folder.

The script compiles and runs as expected, however the folder doesn't create even though it says it has in the log file,

I understand that the log file will say that because its told too, however, if the folder was unable to be created, wouldnt it crash? or return a false if an if statement was present?


Solution

  • With CreateDir() You must create dirs one after the other and not a dir structure at once.

    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 has a function to create a dir structure at once
    function ForceDirectories(Dir: string): Boolean;

    Example:

    if not DirExists(ExpandConstant('{tmp}\Utilities\SDK')) then
       ForceDirectories(ExpandConstant('{tmp}\Utilities\SDK'));
    

    Also keep in mind :

    • {tmp} all is related to the Inno Setup Temp folder is-XXXXX.tmp
      C:\Users\...\AppData\Local\Temp\is-XXXXX.tmp
    • {%temp} is the users Temp folder
      C:\Users\...\AppData\Local\Temp