For what it's worth, the Excel Refresh Service on codeplex uses this logic:
public static void UsingCOM(T reference, Action doThis) where T : class
{
if (reference == null) return;
try
{
doThis(reference);
}
finally
{
Marshal.ReleaseComObject(reference);
}
}