2

我已经盯着这个 InnoSetup 代码几个小时了,我无法理解以下内容:

- 在“procedure CurStepChanged”中,common.dat 和 common.fat 不会被复制到 {app} 目录。为什么?

-我手动将common.dat和common.fat复制到{app}目录进行测试,但xdelta3.exe不会在“procedure CurStepChanged”中执行。xdelta3.exe 的参数是“-d -s old_file patch_file new_file”。Xdelta3.exe、common_patch.xdelta 和 commonfat_patch.xdelta 被复制到正确的位置 ({app})。为什么?

我在看什么?

[Setup]
AppCopyright=lostprophet
AppName=Far Cry 3 Magyarítás
AppVerName=Far Cry 3 Magyarítás 1.0
RestartIfNeededByRun=false
PrivilegesRequired=admin
SetupIconFile=F:\Copy\Copy\MAGYARITASOK\PROGRESS\Far Cry 3\installer\fc3_ikon.ico
WizardImageFile="F:\Copy\Copy\MAGYARITASOK\PROGRESS\Far Cry 3\installer\installer.bmp"
WizardSmallImageFile="F:\Copy\Copy\MAGYARITASOK\PROGRESS\Far Cry 3\installer\fc3_ikon.bmp"
DefaultDirName={reg:HKLM\Software\Wow6432Node\Ubisoft\Far Cry 3,InstallDir|{pf}\Far Cry 3}
AppendDefaultDirName=false
OutputDir=C:\Users\lostprophet\Desktop
OutputBaseFilename=farcry3hun_1.0
Compression=lzma/Ultra64
InternalCompressLevel=Ultra64
LanguageDetectionMethod=none
UsePreviousGroup=false
AppendDefaultGroupName=false
UninstallDisplayName=Far Cry 3 magyarítás
AppVersion=1.0
UninstallFilesDir=interface
AppPublisherURL=http://lostprophet.ekapocs.com
VersionInfoVersion=1.0
VersionInfoCompany=lostprophet
VersionInfoCopyright=lostprophet
VersionInfoProductName=Far Cry 3 magyarítás
LicenseFile=F:\Copy\Copy\MAGYARITASOK\PROGRESS\Far Cry 3\installer\information.rtf
InfoBeforeFile=F:\Copy\Copy\MAGYARITASOK\PROGRESS\Far Cry 3\installer\information2.rtf
ShowLanguageDialog=auto

[Languages]
Name: "hu"; MessagesFile: "compiler:Languages\Hungarian.isl" 

[Files]
Source: "common_patch.xdelta"; DestDir: {app};
Source: "commonfat_patch.xdelta"; DestDir: {app};
Source: "xdelta3.exe"; DestDir: {app};
Source: "Splash.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[Code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
  ExtractTemporaryFile('Splash.png');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000,3000,1000,0,255,True,$FFFFFF,10);
end;

const
  MySecretDir = '{app}';

procedure OnDirEditChange(Sender: TObject);
begin
  if FileExists(AddBackslash(WizardDirValue) + 'data_win32/patch.dat') then
    WizardForm.NextButton.Enabled := True
  else
    WizardForm.NextButton.Enabled := False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then
  begin
    MsgBox('Válaszd ki a Far Cry 3 telepítési könyvtárát, ha a telepítő önmagától nem találná meg!', mbInformation, MB_OK);
    WizardForm.DirEdit.OnChange := @OnDirEditChange;
    OnDirEditChange(nil);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: integer;
  ErrorCode: integer;
begin
  if CurStep = ssInstall then
  begin
    FileCopy(ExpandConstant('{app}\data_win32\common.dat'),ExpandConstant('{app}'),true);
    FileCopy(ExpandConstant('{app}\data_win32\common.fat'),ExpandConstant('{app}'),true);
    Exec(ExpandConstant('{app}\xdelta3.exe'), '-d -s common.dat common_patch.xdelta common2.dat', '',SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    Exec(ExpandConstant('{app}\xdelta3.exe'), '-d -s common.fat commonfat_patch.xdelta common2.fat', '',SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  OldFile3: string;
  OldFile4: string;
begin
  if CurUninstallStep = usPostUninstall then
  begin
    OldFile3 := ExpandConstant('{app}\data_win32\common_orig.dat');
    OldFile4 := ExpandConstant('{app}\data_win32\common_orig.fat');
    if FileExists(OldFile3) and FileExists(OldFile4) then
      begin
      RenameFile(OldFile3, ExpandConstant('{app}\data_win32\common.dat'));
      RenameFile(OldFile4, ExpandConstant('{app}\data_win32\common.fat'));
  end;
end;
end;
4

0 回答 0