【问题标题】:Get a files last updated time using pascal (innosetup)使用 pascal (innosetup) 获取文件的最后更新时间
【发布时间】:2009-04-15 01:17:06
【问题描述】:

在 innosetup 脚本的卸载部分,我想添加一个检查以查看特定文件的最后更新日期时间是否发生在过去 10 分钟内。

有人知道innosetup 兼容的pascal 代码吗?

【问题讨论】:

    标签: inno-setup pascal


    【解决方案1】:

    您可以使用 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

    【讨论】:

      【解决方案2】:

      目前支持此功能的唯一方法是使用 DLL 并将其链接到您的卸载程序。

      您必须编写具有所需功能的 DLL。

      默认的 INNOSetup 安装有示例向您展示如何调用 DLL。之后就应该很简单了。

      只要你会写一个DLL。

      HTH, 瑞恩。

      【讨论】:

      • 这是不正确的。 InnoSetup 支持轻松导入大多数 Windows API 函数。
      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多