At LeumiCard Customer services there are some programs running straight from a shared network folder. This has been done long before I started working there and was a real problem I encountered while trying to implement the deployment process, since while people are using the program the files are in use and cannot be replaced.
This issue gets complicated when you have other applications calling these software, and to make everything worse the network folder is a Netapp folder which is being monitored and scanned and only few people at the company have the permission to release the file and this has to be done by removing all users from the parent folder.
So as you noticed this is a very troubling issue when you are trying to deploy a new build. I once had this issue at Zend but there we used a linux file system and the symbolic link (symlink) worked as a charm. I had a folder called latest and it actually was a symlink to a specific release. I also implemented it at the windows environment using junction command. you can read about symlink and junction here. So obviously when I encountered this issue again I first went to the windows junction solution. However, due to permission issue it was not allowed so I tried different approach using the Netapp file system which works in linux environment but again due to permission I had to leave it alone. So I was left with only option which is to brainstorm with my boss and instead of looking at the file system we decided to look at the file itself, the launcher file. Launcher file is a small exe file with a corresponding config file which contains two parameters (file name and working directory) the launcher runs with the arguments it is given and add the to the file name listed in the config file from the appropriate working directory. So now in the build process I was left to build the software keep it in a labeled folder and set the config file to the correct folder. By doing so every user run the launcher and not software itself. and by doing so the software itself can be remained locked and not interfere with the customer service task. Upgrading the software is done by changing the config to point to a newer version, and subsequently downgrading/rollback again is done by the same method of changing the config.