使用 Inno Setup 更新文件后,应用程序看到旧版本的文件

Application sees old version of files after updating the files with Inno Setup-made update

在 Windows 10 下遇到以下情况的问题:

  1. Inno Setup 脚本有 PrivilegesRequired=admin 标志

  2. 初始安装没有任何问题

  3. 安装了一个更新,修改了一些.exe和软件相关的本地环境文件(也安装在软件安装文件夹C:\Program Files\XYZ\中的文本文件)。

  4. 当 运行 用户帐户下的软件出现问题:

    一个。当 运行 在用户帐户下时:软件会看到初始安装时已安装的文本文件(旧文件)。但是,.EXE 文件来自更新(新文件)

    b。当 运行 在 Admin 帐户下时:没问题,一切正常,软件可以看到新的 .EXE 和文本文件

    c。在用户帐户和 运行 软件下创建了 C:\Program Files\XYZ\ 文件夹的副本:一切正常,软件可以看到新的 .EXE 和文本文件

[Setup]
DefaultDirName={pf}\XYZ\MyProgramName
PrivilegesRequired=admin
UsePreviousAppDir=false
AppendDefaultDirName=false

[Files]    
Source: E:\App1.exe; DestDir: {app}; Flags: ignoreversion; Check: InstStandalone
Source: E:\App2.exe; DestDir: {app}; Flags: ignoreversion; Check: InstStandalone

Source: {#MyInstlSourceDir}Hed\mastlca12i.hed; DestDir: {app}; Flags: ignoreversion
Source: {#MyInstlSourceDir}Hed\mastlca12m.hed; DestDir: {app}; Flags: ignoreversion
Source: {#MyInstlSourceDir}Hed\mastlca12Pi.hed; DestDir: {app}; Flags: ignoreversion
Source: {#MyInstlSourceDir}Hed\mastlca12Pm.hed; DestDir: {app}; Flags: ignoreversion

我应该在安装更新时设置一些特殊权限吗?

提前致谢。

我的大胆猜测是您的应用程序写入文件。如果应用程序没有应用程序清单,Windows 会将其视为遗留应用程序,从而启用兼容模式。在该模式下,当应用程序尝试在其安装文件夹中写入文件时,用户实际上没有写入权限,Windows 会将写入重定向到虚拟存储。下次应用程序 运行 时,它会从虚拟存储中读取文件,而不是从原始安装文件夹中读取文件。因此,即使您更新了原始文件,应用程序仍会使用它自己从虚拟商店中获得的副本。

详情见Application installed with Inno Setup writes files to unknown location instead of its installation folder