Ну, я нашел ответ на эту проблему и придумал этот метод, который я воспроизвел здесь на случай, если он пригодится. Что он делает:
Если конечный пользователь изменил файл назначения, отобразите сообщение, по умолчанию оставив его в покое.
Если конечный пользователь НЕ изменил целевой файл, всегда заменяйте его.
Для этого вам нужно использовать настройки скрипта:
[Setup]
; A 'magic' date time
TouchDate=1991-01-01
TouchTime=01:01
Когда происходит установка, все «мои» файлы имеют отметку 01.01.1991 01:01, что делает его полезным для проверки и позволяет мне использовать следующие две строки в разделе [Файлы] для любого файла который конечный пользователь может редактировать, например:
[Files]
Source: "...\*.*"; DestDir: <DestDir>; Flags: touch recursesubdirs createallsubdirs overwritereadonly comparetimestamp promptifolder;
Source: "...\*.*"; DestDir: <DestDir>; Flags: touch recursesubdirs createallsubdirs overwritereadonly; Check: IsMagic;
Обе строки пытаются установить файл, но вторая строка устанавливает файл с использованием разностных флагов, если файл все еще «один из моих» с использованием функции проверки «IsMagic». Функция IsMagic объявлена в коде следующим образом:
[Code]
// ------------------------------------------------------------------------------------
function FileNameToLastWriteTime( const AFileName : string ) : TFileTime;
// Returns the file time of the last write to this file
var
FindRec : TFindRec;
begin
Result.dwLowDateTime := 0;
Result.dwHighDateTime := 0;
try
If FindFirst( AFileName, FindRec ) then
Result := FindRec.LastWriteTime;
finally
FindClose(FindRec);
end;
end;
// ------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------
function IsMagic : boolean;
// This returns TRUE if the file date/time shows it to be an 'ART magic' file, i.e it
// has a date/time stamp that has not been changed by the customer. Typically an ART magic
// file is stamped to '1-1-1991 01:01'. This routine returns TRUE if the current file
// date/time is no later than 31/12/1991 23:59:42.569 corresponding to file time of
// H=28728269, L=0.
var
Time : TFileTime;
S : string;
begin
S := CurrentFileName;
Time := FileNameToLastWriteTime( S );
Result := Time.dwHighDateTime <= 28728269;
end;
// ------------------------------------------------------------------------------------
Надеюсь, это пригодится.