KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
In my program I use the Running Object Table (ROT) to ensure only one instance of my program is running. Since I "inherit" that code from a developer who unfortunately left the company, I am the poor guy to solve the problems. The code works fine, but we have 3 customers (out of 39,000) who will get an AccessDeniedException . Every customer runs the software in user mode. Any suggestions what could be wrong? bool retVal = false; IMoniker[] arrMoniker = new IMoniker[1]; IBindCtx bindCtx = null; string displayName; int hResult; int mkSys; Guid clsidRot; bool guidCompare = false; IntPtr number = IntPtr.Zero; moreObjectsListed = false; objectFromRot = null; try { // check the objects in the running object table for fitting the specified class id while ((retVal == false) && (0 == enumMoniker.Next(1, arrMoniker, number))) { hResult = CreateBindCtx(0, out bindCtx); if (hResult == 0) { arrMoniker[0].IsSystemMoniker(out mkSys); if (mkSys == 4) { try { // the display name is the class id of the object in the table // --> AccessDeniedException raises here <-- arrMoniker[0].GetDisplayName(bindCtx, null, out displayName); clsidRot = new Guid(displayName.Substring(1)); guidCompare = clsidRot.Equals(clsid); } catch(Exception) {} // an object with fitting class id was found if (guidCompare == true) { rot.IsRunning(arrMoniker[0]); rot.GetObject(arrMoniker[0], out objectFromRot); retVal = true; } } } } } finally { if (arrMoniker[0] != null) { moreObjectsListed = true; Marshal.ReleaseComObject(arrMoniker[0]); } if (bi
Tags (comma-separated)
Save Edits
Cancel