不要测试Inno Setup

时间:2017-07-10 11:05:53

标签: inno-setup

我的安装程序应该在已存在的情况下跳过更新程序文件,但是,它表示应用程序正在使用文件,并且安装无法继续。

  

安装程序无法自动关闭所有应用程序。建议您在继续之前使用需要由安装程序更新的文件关闭所有应用程序。

     

单击“重试”再试一次,“忽略”仍然继续,或者“中止”取消安装。

安装脚本中的更新程序文件将按此导入

Source: "..\bin\Release\updater\*"; DestDir: "{app}\updater"; Flags: onlyifdoesntexist

根据文档,标记onlyifdoesntexist应确保将来不修补文件。

我甚至尝试删除updater目录以外的所有内容,以确保这些文件导致问题。有什么想法吗?

这是日志文件

2017-07-10 14:12:59.229   Log opened. (Time zone: UTC+02:00)
2017-07-10 14:12:59.229   Setup version: Inno Setup version 5.5.9 (u)
2017-07-10 14:12:59.229   Original Setup EXE: C:\Users\pikausp\AppData\Roaming\TMEgadget4\updater.exe
2017-07-10 14:12:59.229   Setup command line: /SL5="$F0962,149593,121344,C:\Users\pikausp\AppData\Roaming\TMEgadget4\updater.exe" /SPAWNWND=$140E9A /NOTIFYWND=$C0CAA /VERYSILENT
2017-07-10 14:12:59.229   Windows version: 10.0.14393  (NT platform: Yes)
2017-07-10 14:12:59.229   64-bit Windows: Yes
2017-07-10 14:12:59.229   Processor architecture: x64
2017-07-10 14:12:59.229   User privileges: Administrative
2017-07-10 14:12:59.229   64-bit install mode: No
2017-07-10 14:12:59.231   Created temporary directory: C:\Users\pikausp\AppData\Local\Temp\is-88HJM.tmp
2017-07-10 14:12:59.307   RestartManager found an application using one of our files: TMEgadget.Updater
2017-07-10 14:12:59.307   Can use RestartManager to avoid reboot? Yes (0)
2017-07-10 14:12:59.311   Starting the installation process.
2017-07-10 14:12:59.313   Shutting down applications using our files.
2017-07-10 14:13:29.359   Some applications could not be shut down.
2017-07-10 14:13:29.359   Message box (Abort/Retry/Ignore):
                          Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing.

                          Click Retry to try again, Ignore to proceed anyway, or Abort to cancel installation.
2017-07-10 14:13:34.796   User chose Abort.
2017-07-10 14:13:34.796   User canceled the installation process.
2017-07-10 14:13:34.796   Rolling back changes.
2017-07-10 14:13:34.797   Starting the uninstallation process.
2017-07-10 14:13:34.797   Uninstallation process succeeded.
2017-07-10 14:13:34.797   Deinitializing Setup.
2017-07-10 14:13:34.802   Log closed.

1 个答案:

答案 0 :(得分:4)

onlyifdoesntexist确实未进行评估,目的是检查正在运行的应用程序使用的文件。

Check parameter已被评估。

所以你可以像这样实现存在的测试:

[Files]
Source: "..\bin\Release\updater\*"; DestDir: "{app}\updater"; Check: OnlyIfDoesntExist

[Code]

function OnlyIfDoesntExist: Boolean;
begin
  Result := not FileExists(ExpandConstant(CurrentFilename));
end;

另一种方法是创造性地设置CloseApplicationsFilter directive不要将文件包含在updater文件夹中。