我正在嘗試使用運行對象表來獲取DTE特定的Visual Studio實例。我打算使用MSDN上描述的技術。我設法讓其中一個實例列出,但不是其他實例。瞭解運行對象表
public static void PrintRot()
{
IRunningObjectTable rot;
IEnumMoniker enumMoniker;
int retVal = GetRunningObjectTable(0, out rot);
if (retVal == 0)
{
rot.EnumRunning(out enumMoniker);
IntPtr fetched = IntPtr.Zero;
IMoniker[] moniker = new IMoniker[1];
while (enumMoniker.Next(1, moniker, fetched) == 0)
{
IBindCtx bindCtx;
CreateBindCtx(0, out bindCtx);
string displayName;
moniker[0].GetDisplayName(bindCtx, null, out displayName);
Console.WriteLine("Display Name: {0}", displayName);
}
}
}
[DllImport("ole32.dll")]
private static extern void CreateBindCtx(int reserved, out IBindCtx ppbc);
[DllImport("ole32.dll")]
private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);
下面是結果:
Display Name: !VisualStudio.DTE.11.0:7120
Display Name: clsid:331F1768-05A9-4DDD-B86E-DAE34DDC998A:
Display Name: !{7751A556-096C-44B5-B60D-4CC78885F0E5}
Display Name: c:\users\dave\documents\visual studio 2012\Projects\MyProj\MyProj.sln
Display Name: !{059618E6-4639-4D1A-A248-1384E368D5C3}
我希望看到多條線路與VisualStudio.DTE我在做什麼錯?我應該期待看到什麼?
編輯:
這似乎與應用程序是否在運行提升權限。如果我保持一致並使用正常模式,那麼它就可以工作。不過,我希望它能夠工作,不管怎樣,我如何獲得所有進程的ROT?
做工精細當我嘗試它。 – 2012-08-06 21:24:00
你在運行另一個實例嗎?你運行這個EXE提升? – 2012-08-06 21:27:55
@HansPassant你在結果中看到了什麼? – 2012-08-06 21:38:42