我正在尝试使用运行对象表来获取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);
Run Code Online (Sandbox Code Playgroud)
结果如下:
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}
Run Code Online (Sandbox Code Playgroud)
我希望看到VisualStudio.DTE多行.我做错了什么?我应该期待看到什么?
编辑:
这似乎与应用程序是否正在运行提升权限有关.如果我一致并使用正常模式,那么它可以工作.但是,无论如何我都希望它可以工作,如何获得所有进程的ROT?
你在运行另一个提升的实例吗?你在运行exe提升了吗?
当您是以标准用户身份运行的进程时,您只能看到属于您的进程/等.因此,您不会看到以管理员身份运行的进程.
使用升级的权限运行时,您可以查看属于所有用户的所有进程.
理想情况下,一切都将作为"最低权限用户"运行,请参阅http://en.wikipedia.org/wiki/Principle_of_least_privilege
| 归档时间: |
|
| 查看次数: |
7798 次 |
| 最近记录: |