Inno setup 如何在Inno Setup Pascal脚本中设置现有文件的创建时间

Inno setup 如何在Inno Setup Pascal脚本中设置现有文件的创建时间,inno-setup,pascalscript,Inno Setup,Pascalscript,通过FileCopy(或RenameFile)将文件从一个目录复制到另一个目录时,原始创建时间更改为当前日期。我想将创建时间设置为原始时间 我可以通过FindFirst获取原始时间值,但是调用SetFileTime时如何获取要使用的文件句柄 在Inno设置的[code]部分,我有以下代码: 如果文件复制(F1、F2、False),则 如果FindFirst(F1,FindRec),则 尝试 Fhandle:=???????????(FindRec.FindHandle不起作用) 设置文件时间(

通过
FileCopy
(或
RenameFile
)将文件从一个目录复制到另一个目录时,原始创建时间更改为当前日期。我想将创建时间设置为原始时间

我可以通过
FindFirst
获取原始时间值,但是调用
SetFileTime
时如何获取要使用的文件句柄

在Inno设置的
[code]
部分,我有以下代码:

如果文件复制(F1、F2、False),则
如果FindFirst(F1,FindRec),则
尝试
Fhandle:=???????????(FindRec.FindHandle不起作用)
设置文件时间(
Fhandle,FindRec.CreationTime,FindRec.LastAccessTime,FindRec.LastWriteTime)
最后
FindClose(FindRec);
结束

编辑:

在回答Martin的问题后,我对代码进行了如下修改(很抱歉,如果远远不够完美…我是VB.NET程序员,而不是Pascal程序员):

{C1和C2是完整路径}
如果不是FileCopy(C1、C2、False),则
开始
MsgBox('数据读取错误01。安装程序将被中止',mbError,MB_OK);
结果:=假;
出口
结束;
如果FindFirst(C2,FindRec),则
尝试
开始
MyTime:=FindRec.LastWriteTime//保持原始状态
结束;
最后
FindClose(FindRec);
结束
其他的
开始
MsgBox('数据读取错误02。安装程序将被中止',mbError,MB_OK);
结果:=假;
出口
结束;
结束;
FileStream:=TFileStream.Create(C2,fmOpenReadWrite);
尝试
如果未设置FileTime(FileStream.Handle、MyTime、MyTime、MyTime),则
开始
MsgBox('数据读取错误03。安装程序将被中止',mbError,MB_OK);
结果:=假;
出口
结束;
最后
免费文件流;
结束;

要获取文件句柄,可以使用:

var
FileStream:TFileStream;
开始
{ ... }
FileStream:=TFileStream.Create(文件名,fmOpenReadWrite);
尝试
SetFileTime(FileStream.Handle、CreationTime、LastAccessTime、LastWriteTime);
最后
免费文件流;
结束;
结束;


尽管如@Ken所写,在大多数情况下,使用带有.

[Files]
节条目会更容易。为什么您要手动复制文件,而不是让IS为您执行?它可以直接执行此操作,包括在过程中使用标志
Touch
设置文件戳记。如果您是从同一分区复制,您甚至不必这样做;只需使用
外部
标志。我同意!请勾选答案以接受答案。不仅仅是投票。我们免费把工作写进我们的答案里。通过勾选,您正在建立我们的声誉。请查看您个人资料中的问题部分,并在可以回答的问题上打勾。谢谢。@Martin/Andrew:ops,对不起,我接受(我想点击harrow)@Ken:因为这些文件是存在的,所以它们不是存储在[File]部分的文件。在以前的设置中创建的旧文件,我必须将其移动到其他目录中,以维护creatiin时间。然后使用外部标志,正如我前面所说的。它从外部位置复制文件(也称为,不在安装文件中)。