2
votes

My installer should skip updater files when they already exist, however, it says that files are in use by applications and the installation cannot proceed.

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.

The updater files in the setup script are imported like this

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

According to the documentation the flag onlyifdoesntexist should ensure that files are not patched in the future.

I even tried to remove everything other than the updater directory to make sure those files are causing the problem. Any ideas?

Here is the log file

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
I cannot reproduce this. Show us a log file of minimal reproducible example (a single file installation).Martin Prikryl
@MartinPrikryl updated the question, that should be ok fromat I believe?pikausp
I'll add the logs in a momentpikausp
@MartinPrikryl added the logs, sorry for the delaypikausp

1 Answers

4
votes

The onlyifdoesntexist is indeed not evaluated for purposes of checking for files being used by running applications.

But the Check parameter is evaluated.

So you can implement the test for existence like this:

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

[Code]

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

Another way is to creatively set the CloseApplicationsFilter directive not to include the files in the updater folder.