在 Inno Setup InitializeSetup 期间从安装程序中提取同名文件

Extracting files with same name from installer during Inno Setup InitializeSetup

这是我的文件部分

Source: "Deployment\x64\SQLite.Interop.dll"; DestDir: "{app}\x64"
Source: "Deployment\x64\System.Data.SQLite.dll"; DestDir: "{app}\x64"
Source: "Deployment\x64\System.Data.SQLite.Linq.dll"; DestDir: "{app}\x64"
Source: "Deployment\x86\SQLite.Interop.dll"; DestDir: "{app}\x86"; DestName
Source: "Deployment\x86\System.Data.SQLite.dll"; DestDir: "{app}\x86"
Source: "Deployment\x86\System.Data.SQLite.Linq.dll"; DestDir: "{app}\x86"

在 Inno Setup 的第一个 window 出现后,我需要一个检查列表。为此我调用了这个函数

function RunCheckListApp(): Boolean;
var
  resultCode: Integer;
  source: string;
  destination: string;
begin
  ExtractTemporaryFile('Insync.eConnect.InstallerPreRequisiteCheck.exe');
  ExtractTemporaryFile('APPSeConnect.Communications.dll');
  ExtractTemporaryFile('InSync.eConnect.APPSeCONNECT.dll');
  ExtractTemporaryFile('Microsoft.AspNet.SignalR.Client.dll');
  ExtractTemporaryFile('Newtonsoft.Json.dll');
  ExtractTemporaryFile('System.Data.SQLite.dll');
  ExtractTemporaryFile('System.Data.SQLite.dll');
  ExtractTemporaryFile('InSync.eConnect.NLogModule.dll'); 
  destination:=ExpandConstant('{tmp}\Adapters');
  CreateDir(destination);
  destination:=ExpandConstant('{tmp}\x86');
  CreateDir(destination);
  destination:=ExpandConstant('{tmp}\x64');
  CreateDir(destination);
  ExtractTemporaryFiles('{tmp}\x86\SQLite.Interop.dll');

  destination := ExpandConstant('{tmp}\Adapters\InSync.eConnect.NLogModule.dll')
  source := ExpandConstant('{tmp}\InSync.eConnect.NLogModule.dll');
  FileCopy(source, destination, False);
  DeleteFile(source);

  Exec(ExpandConstant('{tmp}\Insync.eConnect.InstallerPreRequisiteCheck.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, resultCode);
  if resultCode > 0
  then begin
    Result:= true;
  end
  else
  begin
    Result:= false;
  end;
end;

InitializeSetup 函数中。 我正在尝试的应用 运行 需要相应文件夹中的 DLL 才能正常运行。

Deployment\x64\SQLite.Interop.dll{app}\x64
Deployment\x86\SQLite.Interop.dll{app}\x86
这些是复制的文件。 现在应用 Insync.eConnect.InstallerPreRequisiteCheck.exe 需要相同文件夹中的相同 DLL 才能工作。 我正在尝试将那些具有相同名称并具有相同结构的 DLL 提取到临时文件夹。

ExtractTemporaryFiles 采用 DestDir 参数指定的完整路径(具有未扩展的常量)。它仍然提取到 {tmp}.

ExtractTemporaryFiles('{app}\x86\SQLite.Interop.dll');

相关问题: