Ich habe normalerweise keine Probleme beim Sichern von Savegames, aber für dieses spezielle Spiel verwende ich FreeArc, da das Spiel sehr groß ist, so dass Inno Setup nicht wirklich weiß, welche Dateien löschen. Mit FreeArc, müssen SieInno Setup - Lösche ganze Anwendung Ordner mit Ausnahme von Daten Unterverzeichnis
[UninstallDelete]
Type: files; Name: "{app}"
aber dieses Spiel speichert Spielstände in {app}\data\save
verwenden. Ich brauche eine Funktion, um diesen Ordner irgendwo zu verschieben, das Spiel zu deinstallieren und es dann zurück zu bewegen.
Hier ist mein Code:
procedure DirectoryCopy(SourcePath, DestPath: string);
var
FindRec: TFindRec;
SourceFilePath: string;
DestFilePath: string;
begin
if FindFirst(SourcePath + '\*', FindRec) then
begin
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
SourceFilePath := SourcePath + '\' + FindRec.Name;
DestFilePath := DestPath + '\' + FindRec.Name;
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
if FileCopy(SourceFilePath, DestFilePath, False) then
begin
Log(Format('Copied %s to %s', [SourceFilePath, DestFilePath]));
end
else
begin
Log(Format('Failed to copy %s to %s', [SourceFilePath, DestFilePath]));
end;
end
else
begin
if CreateDir(DestFilePath) then
begin
Log(Format('Created %s', [DestFilePath]));
DirectoryCopy(SourceFilePath, DestFilePath);
end
else
begin
Log(Format('Failed to create %s', [DestFilePath]));
end;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Log(Format('Failed to list %s', [SourcePath]));
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
Begin
if (CurUninstallStep = usUninstall) and DirExists(ExpandConstant('{app}\data\SAVE')) then
begin
if MsgBox('Do you want to delete all save games?', mbConfirmation, MB_YESNO) = IDYES then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end
else
begin
DirectoryCopy(ExpandConstant('{app}\data\SAVE'), ExpandConstant('{app}\SAVE'));
Deltree(ExpandConstant('{app}\data'), True, True, True);
DirectoryCopy(ExpandConstant('{app}\SAVE'), ExpandConstant('{app}\data\SAVE'));
end
end;
End;
Und hier ist das Protokoll:
2016-04-08 10:16:02.420 Log opened. (Time zone: UTC+04:00)
2016-04-08 10:16:02.421 Setup version: Inno Setup version 5.5.6 (u)
2016-04-08 10:16:02.421 Original Uninstall EXE: C:\Games\MyApp\unins001.exe
2016-04-08 10:16:02.421 Uninstall DAT: C:\Games\MyApp\unins001.dat
2016-04-08 10:16:02.421 Uninstall command line: /SECONDPHASE="C:\Games\MyApp\unins001.exe" /FIRSTPHASEWND=$B5111C /log=C:\setup.log
2016-04-08 10:16:02.421 Windows version: 6.1.7601 SP1 (NT platform: Yes)
2016-04-08 10:16:02.421 64-bit Windows: Yes
2016-04-08 10:16:02.421 Processor architecture: x64
2016-04-08 10:16:02.421 User privileges: Administrative
2016-04-08 10:16:02.421 64-bit install mode: No
2016-04-08 10:16:02.422 Created temporary directory: C:\Users\George\AppData\Local\Temp\is-GSI4R.tmp
2016-04-08 10:16:02.440 Message box (Yes/No):
Are you sure you want to completely remove MyApp and all of its components?
2016-04-08 10:16:04.014 User chose Yes.
2016-04-08 10:16:04.031 Message box (Yes/No):
Do you want to delete all save games?
2016-04-08 10:16:04.790 User chose No.
2016-04-08 10:16:04.791 Failed to create C:\Games\MyApp\SAVE\scores
2016-04-08 10:16:04.805 Failed to list C:\Games\MyApp\SAVE
2016-04-08 10:16:04.805 Starting the uninstallation process.
2016-04-08 10:16:04.806 Deleting Uninstall data files.
2016-04-08 10:16:05.326 Uninstallation process succeeded.
2016-04-08 10:16:05.326 Removed all? Yes
2016-04-08 10:16:05.326 Need to restart Windows? No
2016-04-08 10:16:05.814 Message box (OK):
MyApp was successfully removed from your computer.
2016-04-08 10:16:06.678 User chose OK.
2016-04-08 10:16:06.679 Log closed.
* "hat nicht wirklich funktioniert, wie ich es erwartet hatte" * - Bedeutet was? Zeig uns deinen Code. Zeigen Sie uns die Protokolldatei. Erklären Sie, was falsch gelaufen ist. –
Der Ordner '{app}' wurde noch gelöscht. Hier gehts zu meinen noob qestions: wie logge ich mich? –
'setup.exe/log = setup.log' + Zeigen Sie uns Ihren Code. –