Skip to content
⌘ NSIS Forum Archive

How to handle replacing files which are in use?

10 posts

richiebabes#

How to handle replacing files which are in use?

I created an NSIS install script that works unless a certain application is running which is part of the install. What is the best way to handle this?

I.e. let's say myexecutable.exe is in the list of files I want to install but when the user installs they have an older version running and myexecutable.exe is running.
Afrow UK#
This is a macro I use to replace on reboot:
  !macro InstallOnReboot Source Destination
SetFileAttributes `${Destination}` NORMAL
File `/oname=${Destination}.new` `${Source}`
Delete /rebootok `${Destination}`
Rename /rebootok `${Destination}.new` `${Destination}`
!macroend
Usage:
  !insertmacro InstallOnReboot localfile.exe $SYSDIR\outfile.exe
The SetFileAttributes fixes a problem we found with files set to hidden+system (they were not always replaced).

Stu
richiebabes#edited
OK, I figured out how to use this and it works... but the only problem is that it requires a reboot. Is there no way we can ask the user to nicely close down the application before proceeding with the install?
richiebabes#
Like you know, a handy window saying "The following applications need to be closed down before installation can continue. Please close them and click Retry to continue, or you will be sent to the fires of hell for the weekend".
Afrow UK#
Sure, http://nsis.sf.net/LockedList_plug-in
You can use the AddModule function and give it the path to your application.

Stu
richiebabes#
Is it possible to only show the locked files page if there are actually files to be closed? If there are none I'd really like to just skip past it...
Afrow UK#
This would be a good addition. I'll add that option when I am next free (may be at the weekend).

Stu
richiebabes#
Good stuff. If I have any spare time (rofl) I can look into it too now I am getting the hang of this NSIS stuff.

Just want to say, after being plagued with using InstallShield the last couple of years, NSIS is a wonderful breath of fresh air!
Animaether#
coming from...
Are you a developer who uses NSIS to distribute your application? Are you a Winamp plug-in developer who wants to use NSIS to distribute your plug-in? Have suggestions for other people like you? This is the place.

( WINAMP.COM | Forums > Developer Center > NSIS Discussion > How do we overwrite a running file )

Originally posted by Afrow UK
This is a macro I use to replace on reboot:
Could that easily be adapted to try the File method first, then check for the Error flag, and only use the .new-extraction/delete/rename on reboot -if- the File method failed?
I think that in the end, the result would be the same, but the number of file interactions would presumably go down? Any caveats with that thought?