Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用System.Diagnostics.Process.GetCurrentProcess()获取当前Visual Studio实例;_C#_.net_Visual Studio_Process_Vsix - Fatal编程技术网

C# 无法使用System.Diagnostics.Process.GetCurrentProcess()获取当前Visual Studio实例;

C# 无法使用System.Diagnostics.Process.GetCurrentProcess()获取当前Visual Studio实例;,c#,.net,visual-studio,process,vsix,C#,.net,Visual Studio,Process,Vsix,我为Visual Studio 2013(VSIX项目)创建了一个新菜单 与单击菜单的Visual Studio实例相关的菜单功能 我正在使用获取当前的Visual Studio实例 System.Diagnostics.Process vsProcess = System.Diagnostics.Process.GetCurrentProcess(); 我对它的用途是 [DllImport("User32")] private static extern int ShowWindow(int

我为Visual Studio 2013(VSIX项目)创建了一个新菜单

与单击菜单的Visual Studio实例相关的菜单功能

我正在使用获取当前的Visual Studio实例

System.Diagnostics.Process vsProcess = System.Diagnostics.Process.GetCurrentProcess();
我对它的用途是

[DllImport("User32")]
private static extern int ShowWindow(int hwnd, int nCmdShow);

ShowWindow((int)vsProcess.MainWindowHandle, 3);
但是,当使用菜单时,它总是使用执行的第一个VisualStudio实例,无论从哪个实例单击菜单

例如:VisualStudio的实例A被启动,然后是B

无论从哪个实例单击菜单,它都将始终选择实例A

然后我关闭A并再次打开它(B仍在运行)

现在单击菜单时,它将选择B

你知道为什么会发生这种情况,以及如何解决它吗


谢谢。

我找到了一个解决方案:获取当前VS实例的DTE对象,然后从那里获取
MainWindowHandle

EnvDTE.DTE vsDte =  (EnvDTE.DTE)ServiceProvider.GlobalProvider.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE));

var mainWindowHandle = (IntPtr)vsDte.MainWindow.HWnd;

ShowWindow((int)mainWindowHandle, 3);

我找到了一个解决方案:获取当前VS实例的DTE对象,并从那里获取
MainWindowHandle

EnvDTE.DTE vsDte =  (EnvDTE.DTE)ServiceProvider.GlobalProvider.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE));

var mainWindowHandle = (IntPtr)vsDte.MainWindow.HWnd;

ShowWindow((int)mainWindowHandle, 3);