Получить файлы, которые последний раз обновлялись, используя pascal (innosetup) - PullRequest
1 голос
/ 15 апреля 2009

В части удаления сценария innosetup я хотел бы добавить проверку, чтобы увидеть, произошло ли время последнего обновления определенного файла в течение последних 10 минут.

Кто-нибудь знает для этого совместимый Паскаль-код innosetup?

Ответы [ 2 ]

5 голосов
/ 30 июня 2009

Вы можете использовать функцию Windows API GetFileAttributesEx, чтобы получить дату последнего изменения. Поместите это в ваш раздел [CODE] должно работать:

const
    GetFileExInfoStandard = $0;

type 
    FILETIME = record 
      LowDateTime:  DWORD; 
      HighDateTime: DWORD; 
    end; 

    WIN32_FILE_ATTRIBUTE_DATA = record 
      FileAttributes: DWORD; 
      CreationTime:   FILETIME; 
      LastAccessTime: FILETIME; 
      LastWriteTime:  FILETIME; 
      FileSizeHigh:   DWORD; 
      FileSizeLow:    DWORD; 
    end; 

    SYSTEMTIME = record 
      Year:         WORD; 
      Month:        WORD; 
      DayOfWeek:    WORD; 
      Day:          WORD; 
      Hour:         WORD; 
      Minute:       WORD; 
      Second:       WORD; 
      Milliseconds: WORD; 
    end; 

function GetFileAttributesEx (
    FileName:            string;  
    InfoLevelId:         DWORD; 
    var FileInformation: WIN32_FILE_ATTRIBUTE_DATA
    ): Boolean; 
external 'GetFileAttributesExA@kernel32.dll stdcall'; 

function FileTimeToSystemTime(
    FileTime:        FILETIME; 
    var SystemTime:  SYSTEMTIME
    ): Boolean; 
external 'FileTimeToSystemTime@kernel32.dll stdcall'; 

Вы можете проверить это, изменив функцию InitializeWizard вашего проекта установщика следующим образом:

procedure InitializeWizard();
    var 
      FileInformation: WIN32_FILE_ATTRIBUTE_DATA; 
      SystemInfo: SYSTEMTIME;     
begin
    GetFileAttributesEx(
        'c:\ntldr', 
        GetFileExInfoStandard , 
        FileInformation); 

    FileTimeToSystemTime(
        FileInformation.LastWriteTime, 
        SystemInfo); 

    MsgBox(
        format(
            '%4.4d-%2.2d-%2.2d', 
            [SystemInfo.Year, SystemInfo.Month, SystemInfo.Day]),
        mbInformation, MB_OK);
end;

В моей системе (XP SP3) окно сообщения гласит: 2008-08-04

0 голосов
/ 27 апреля 2009

На данный момент единственный способ поддержать это - использовать DLL и связать ее с вашей деинсталляцией.

Вам нужно будет написать DLL, в которой есть нужные вам функции.

В стандартной установке INNOSetup есть примеры, показывающие, как вызывать библиотеки DLL. После этого все должно быть просто.

Пока вы можете написать DLL.

НТН, Райан.

...