Here's an interesting little thing I've found - SQL 2005, when given two errors, CATCHes one and lets the other pass through, while SQL 2008 and up CATCH one and hide the other.
-- Run this in one window; it needs to take at least 20 seconds or so
BACKUP DATABASE [generic] TO DISK = N'\\YourBackupPathAndFilename' WITH CHECKSUM, BLOCKSIZE = 65536, BUFFERCOUNT = 16, MAXTRANSFERSIZE = 4194304
-- Run this in another window immediately after starting the first.
RESTORE HEADERONLY FROM DISK = '\\YourBackupPathAndFilename'
PRINT 'Ignoring error'
Using SSMS 2012 to connect to SQL 2005 SP4 shows:
Msg 3201, Level 16, State 2, Line 2
Cannot open backup device '\\YourBackupPathAndFilename'. Operating system error 32(The process cannot access the file because it is being used by another process.).
Useing SSMS 2012 to connect to SQL 2012 RTM shows:
Thus, the Catch block always fires, but on the SQL 2005 connection SQL Server throws the error anyway, while on the SQL 2012 connection SQL Server does not throw the error.