Не удаляется Dll из {tmp}

Timick

Старожил
Всем привет!

Есть Dll:
C#:
[DllExport(CallingConvention.StdCall)]
public static int Sum(int a, int b)
{
    return a + b;
}
Есть скрипт:
code_language.pascal:
[Setup]
AppName = Test
AppVerName = Test
DefaultDirName = Test
OutputBaseFilename = ../Setup

[Files]
Source: "DllExampleProject\DllExampleProject\bin\Debug\x86\DllExampleProject.dll"; Flags: dontcopy

[Code]
function Sum(a, b: Integer): Integer;
  external 'Sum@{tmp}\DllExampleProject.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('DllExampleProject.dll');

  log(IntToStr(Sum(10, 10)));

  Result := True;
end;
Но после завершения (отмены) установки, скрипт не хочет удалять свою Temp папку.
[13:58:45,154] *** Установка started
[13:58:45,308] Setup version: Inno Setup version 5.5.1.ee2 (u)
[13:58:45,312] Original Setup EXE: C:\Users\TheTimickRus\Desktop\DllExample\Setup.exe
[13:58:45,313] Setup command line: /SL5="$370692,142263,140800,C:\Users\TheTimickRus\Desktop\DllExample\Setup.exe" /DEBUGWND=$2A036C
[13:58:45,314] Windows version: 6.2.9200 (NT platform: Yes)
[13:58:45,315] 64-bit Windows: Yes
[13:58:45,317] Processor architecture: x64
[13:58:45,318] User privileges: Administrative
[13:58:45,320] 64-bit install mode: No
[13:58:45,322] Created temporary directory: C:\Users\THETIM~1\AppData\Local\Temp\is-6S574.tmp
[13:58:45,357] 20
[13:58:49,242] Message box (Yes/No):
Установка не завершена. Если вы выйдете, программа не будет установлена.

Вы сможете завершить установку, запустив программу установки позже.

Выйти из программы установки?
[13:58:50,030] User chose Yes.
[13:58:50,033] Deinitializing Setup.
[13:58:52,040] Failed to remove temporary directory: C:\Users\THETIM~1\AppData\Local\Temp\is-6S574.tmp
[13:58:52,071] *** Установка exit code: 2
Если не вызывать функцию из библиотеки - то все работает в штатном режиме. Можно ли как - то принудительно выгрузить либу?

P.S.: UnloadDLL пробовал - без изменений(
P.S.S.: Для экспорта использовал это (по умолчанию, шарп не дает экспортировать функции): https://github.com/3F/DllExport. Не исключаю, что проблема в этом, но хочется убедиться, что все делаю правильно в скрипте)

Заранее спасибо!
 

Avengerz13

Участник
@Timick, попробуй так
Код:
var
  LastStep: TSetupStep;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  LastStep := CurStep;
end;

procedure DeinitializeSetup();
begin
  if LastStep = ssInstall then
  begin
    UnloadDLL(ExpandConstant('{tmp}\DllExampleProject.dll'));
    MsgBox('The installation was successfully aborted.', mbInformation, MB_OK);
  end;
end;
 

Timick

Старожил
@Avengerz13, без изменений.

Инсталл не удаляет свою Temp папку на любой странице, будь то первая или финальная, если произошел вызов функции из Dll. Как будто "под капотом" продолжается какое - то с ней (dll) взаимодействие, но функция элементарная и как бы... Я немного в шоке, хах

Я, изначально, грешил на DllExport, но ведь она, по - сути, просто дописывает C++ код (если я правильно понял) в библиотеку. А работа с функциями, происходит средствами Inno. Поэтому я, и написал тут)
 
Сверху