Создание папки в папке Temp

Я пытаюсь создать папку во временной папке, которая не имеет случайного имени.

Вот как я пытался создать папку внутри временной папки.

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

Я посмотрел на эту тему, но даже с %К сожалению, он все еще не создает папку.

Сценарий компилируется и запускается, как и ожидалось, однако папка не создается, хотя и говорит, что она есть в файле журнала,

Я понимаю, что в файле журнала будет указано, что, поскольку в нем также указано, что если папка не может быть создана, не произойдет ли сбой? или вернуть false, если присутствовал оператор if?

2 ответа

Решение

С 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 Setup имеет функцию для одновременного создания структуры dir
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 \ это-XXXXX.tmp
  • {% temp} - папка пользователя Temp
    C:\Users\...\AppData\Local\Temp

Я думаю, что вы хотите Windows Temp, а не tmp от InnoSetup

{tmp}: временный каталог, используемый программой установки или удаления. Это не значение переменной окружения TEMP пользователя. Это подкаталог временного каталога пользователя, который создается программой установки или удаления при запуске (с именем, например, "C:\WINDOWS\TEMP\IS-xxxxx.tmp"). Все файлы и подкаталоги в этом каталоге удаляются при выходе из программы установки или удаления. Во время установки это в первую очередь полезно для извлечения файлов, которые должны быть выполнены в разделе [Run], но не нужны после установки.

Поэтому я думаю, что вы хотите сделать что-то вроде этого:

if not DirExists(ExpandConstant('{%temp}\Utilities\SDK')) then
   CreateDir(ExpandConstant('{%temp}\Utilities\SDK'));
   Log('Temp\Utilities\SDK Folder Has Been Created.');
Другие вопросы по тегам