- NSIS Discussion
- How to handle replacing files which are in use?
Archive: How to handle replacing files which are in use?
richiebabes
23rd June 2008 19:18 UTC
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
23rd June 2008 20:38 UTC
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
23rd June 2008 20:52 UTC
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
23rd June 2008 21:40 UTC
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
23rd June 2008 21:47 UTC
Sure, http://nsis.sf.net/LockedList_plug-in
You can use the AddModule function and give it the path to your application.
Stu
richiebabes
23rd June 2008 22:17 UTC
Awesome, thanks!
richiebabes
23rd June 2008 22:57 UTC
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
24th June 2008 10:11 UTC
This would be a good addition. I'll add that option when I am next free (may be at the weekend).
Stu
richiebabes
25th June 2008 21:55 UTC
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
20th January 2009 18:22 UTC
coming from...
http://forums.winamp.com/showthread....42#post2476542
( 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?