Inno setup 使用pascal(innosetup)获取上次更新的文件

Inno setup 使用pascal(innosetup)获取上次更新的文件,inno-setup,pascal,Inno Setup,Pascal,在innosetup脚本的卸载部分,我想添加一个检查,查看特定文件的上次更新日期时间是否发生在最近10分钟内 有人知道这方面的innosetup兼容pascal代码吗?目前支持这一点的唯一方法是使用DLL并将其链接到卸载 您必须编写具有所需功能的DLL 默认的INNOSetup安装有一些示例,演示如何调用DLL。在那之后,它应该是简单的 只要你能写一个DLL 嗯,, Ryan。目前支持此功能的唯一方法是使用DLL并将其链接到卸载 您必须编写具有所需功能的DLL 默认的INNOSetup安装有一些

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


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

目前支持这一点的唯一方法是使用DLL并将其链接到卸载

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

默认的INNOSetup安装有一些示例,演示如何调用DLL。在那之后,它应该是简单的

只要你能写一个DLL

嗯,,
Ryan。

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

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

默认的INNOSetup安装有一些示例,演示如何调用DLL。在那之后,它应该是简单的

只要你能写一个DLL

嗯,,
Ryan。

您可以使用Windows API函数
GetFileAttributesEx
获取上次修改日期。把这个放在[代码]部分应该可以:

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

您可以使用Windows API函数
GetFileAttributesEx
获取上次修改日期。把这个放在[代码]部分应该可以:

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

这是不正确的。InnoSetup支持轻松导入大多数Windows API函数。这是不正确的。InnoSetup支持轻松导入大多数Windows API函数。