Here's a little code to help managed packages call the Running Document Table to rename a document:
Calling IVsRunningDocumenTable.RenameDocument is not entirely straighforward in managed code. Here's some code the shows how to get the SVsRunningDocumentTable service, find a document therein and then rename it. I've had one partner confused by the calling pattern so I figured I'd share the solution with you in case you ever need to employ it.
IVsRunningDocumentTable pRDT = GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;IVsUIShellOpenDocument doc = GetService(typeof(SVsUIShellOpenDocument)) as IVsUIShellOpenDocument;IVsUIShell uiShell = GetService(typeof(SVsUIShell)) as IVsUIShell;if (pRDT == null || doc == null) return;IVsHierarchy pIVsHierarchy;uint itemId;IntPtr docData;uint uiVsDocCookie;NativeMethods.ThrowOnFailure(pRDT.FindAndLockDocument((uint)_VSRDTFLAGS.RDT_NoLock, oldName, out pIVsHierarchy, out itemId, out docData, out uiVsDocCookie));if (docData != IntPtr.Zero) { IntPtr pUnk = Marshal.GetIUnknownForObject(pIVsHierarchy); Guid iid = typeof(IVsHierarchy).GUID; IntPtr pHier; Marshal.QueryInterface(pUnk, ref iid, out pHier); try { NativeMethods.ThrowOnFailure(pRDT.RenameDocument(oldName, newName, pHier, itemId)); } finally { Marshal.Release(pHier); Marshal.Release(pUnk); } Marshal.Release(docData); }I hope this help!
Allen