在我的程序中,我使用运行对象表(ROT)来确保只运行一个程序实例.由于我从一位不幸离开公司的开发人员那里"继承"了这段代码,我是解决问题的穷人.代码工作正常,但我们有3个客户(39,000个)将获得AccessDeniedException.每个客户都以用户模式运行软件.
有什么建议可能是错的吗?
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 …Run Code Online (Sandbox Code Playgroud) 曾几何时,Windows SDK(或 Visual Studio)有一个名为 IROTVIEW 的工具,用于枚举运行对象表 (ROT)。
我现在在哪里可以得到这个工具?
在这里回答我自己的问题。
运行对象表 (ROT) 是 Microsoft 组件对象模型 (COM) 的产物,Excel 和 Word 文档可以在其中进行自我注册,以便计算机上的任何其他应用程序可以访问它们。因此,ROT 促进了对象嵌入和链接 (OLE) 以及进程间通信 (IPC)。
曾经有一个名为 ROTViewer.exe 的程序,可以追溯到 Visual Basic 6 时代,它允许开发人员查看 ROT 的内容。令人惊讶的是,没有人在 StackOverflow (SO) 上发布与 ROTViewer 等效的 C# 列表。
有人有源码吗?