Background:
Our companies internal user's run our .Net programs on 10-20 windows terminal servers. The
executables are all stored on a central file server running windows 2003. Some of the terminal servers are running windows 2003 and some are running 2008.
Issues:
When we release a new version of one of our programs we renamed the files that might be locked (EXE, DLL's, ect.), then we copy the newer version of the file to the proper location. This worked flawlessly until we started introducing windows 2008 terminal servers. Now if a user on one of the 2008 WTS is running the program, then the files are locked in such a way that they cannot even be renamed.
Questions
Is there a way to rename the locked
file?
Is there a way to disable this new feature of 2008 that is locking the EXE files while they are being run?
Is there a better solution?
Not really. If a file is locked, it's locked and unless the process that holds the lock releases it or the network share connection for that user is disconnected, you can't do much with the file.
You should switch to ClickOnce deployment instead of running the executables from a network share. Aside from the updating issue you describe, running from network share has implications on the code access security, and has a perf impact on the initial load of the application.
Our problem turned out to be because of a new feature in windows file sharing called "Opportunistic Locking." It's currently impossible to turn this feature off when both servers are 2008.
We currently have a case open with Microsoft looking for other solutions and work a rounds. Leaning towards using DFS at the moment.
In general you should have no problem to rename locked file on windows 2008 terminal servers exactly as on all previous versions of Windows NT starting with first one Windows NT 3.1.
Probably you have problem with the program which you use for file renaming. You could do this in the old operation systems directly in Explorer, later no more. But it is possible to rename files in CMD.EXE
. Just start cmd.exe
and try rename
command.