実行中のオブジェクトテーブルを使用して、DTEにVisual Studioの特定のインスタンスを取得しようとしています。私はMSDNに記載されているテクニックを使用しようとしていました。私はそのインスタンスの1つを一覧表示するように管理しましたが、他のインスタンスは表示されませんでした。実行中のオブジェクトテーブルの理解
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を取得するにはどうしたらよいのですか?
は細かい作品を参照、「少なくとも特権ユーザー」として実行します。 –
あなたは別のインスタンスを昇格させていますか?あなたはこのexeを上回って走っていますか? –
@HansPassantあなたの結果には何が表示されますか? –