我的安装程序应该在已存在的情况下跳过更新程序文件,但是,它表示应用程序正在使用文件,并且安装无法继续。
安装程序无法自动关闭所有应用程序。建议您在继续之前使用需要由安装程序更新的文件关闭所有应用程序。
单击“重试”再试一次,“忽略”仍然继续,或者“中止”取消安装。
安装脚本中的更新程序文件将按此导入
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.
答案 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
文件夹中。