如何让InstallShield将已安装文件的修改时间戳设为当前安装时间?
让InstallShield强制设置已安装文件的修改时间为安装当前时间
针对你遇到的InstallShield保留源文件修改时间、导致缓存重建逻辑失效的问题,有几种可行的解决方法:
方法1:直接修改项目文件时间戳设置
这是最简便的方式,适合大多数InstallShield版本:
- 打开你的InstallShield项目,切换到Files and Folders视图
- 选中需要调整时间戳的单个文件,或者整个目标文件夹(批量设置),右键点击选择Properties
- 在弹出的属性窗口里,找到Timestamp选项,把它改成
Current Time(部分老版本可能显示为Set to Current Time) - 保存项目后重新生成安装包,安装时这些文件的修改时间就会被替换成安装时刻的系统时间
方法2:用InstallScript脚本自定义修改
如果项目设置里找不到相关选项,或者需要更精细的控制,就加一段InstallScript脚本:
- 打开InstallShield的InstallScript视图,新建或编辑现有脚本文件
- 在
OnAfterInstallFiles事件里添加以下代码(替换成你的实际安装路径):
function OnAfterInstallFiles() STRING szTargetPath, szFileName; NUMBER nFindResult; // 替换为你的应用核心文件所在目录 szTargetPath = TARGETDIR ^ "YourAppCore\\"; nFindResult = FindFirstFile(szTargetPath ^ "*.*", szFileName); while(nFindResult = 0) // 跳过目录本身的.和.. if (szFileName != "." && szFileName != "..") then // 将文件的修改时间设为当前系统时间 SetFileTime(szTargetPath ^ szFileName, FILE_TIME_MODIFIED, NOW); endif; nFindResult = FindNextFile(szFileName); endwhile; end;
- 确认脚本被绑定到安装流程后,重新生成安装包即可
方法3:通过安装后动作调用PowerShell脚本
如果不想改动InstallShield项目的核心设置,还可以用外部脚本实现:
- 写一个PowerShell脚本(比如命名为
UpdateFileTimestamps.ps1):
$targetDirectory = $args[0] # 遍历目标目录下所有文件,修改其最后写入时间为当前时间 Get-ChildItem -Path $targetDirectory -Recurse -File | ForEach-Object { $_.LastWriteTime = Get-Date }
- 在InstallShield的Custom Actions视图里,添加一个新的自定义动作,类型选
Launch an executable - 设置动作执行时机为
After InstallFiles,执行程序选系统自带的PowerShell路径:%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe - 参数填:
-ExecutionPolicy Bypass -File "UpdateFileTimestamps.ps1" "[TARGETDIR]YourAppFolder\"(替换成你的实际文件夹路径) - 把这个PowerShell脚本添加到安装包的文件列表里,确保安装时会被放到临时目录或者指定位置
内容的提问来源于stack exchange,提问作者Sergei Ozerov
相关产品推荐
相关产品推荐

