【问题标题】:Get process id from DTE (EnvDte)从 DTE (EnvDte) 获取进程 ID
【发布时间】:2016-01-05 07:16:39
【问题描述】:

是否可以通过 DTE mDte 变量获取 Visual Studio 实例的进程 ID?参考下面的代码。

    private static DTE mDte;

    public static void OpenVisualStudio()
    {
        Type visualStudioType = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
        mDte = Activator.CreateInstance(visualStudioType) as DTE;

        if (mDte != null)
        {
            mDte.MainWindow.Visible = true;
        }

        // get process id of visual studio instance through mDte
    }

【问题讨论】:

  • 我不知道,但如果你在运行时检查对象,你可能会弄明白。
  • 我已经解决了:
  • 你通过什么解决了这个问题?请分享答案。
  • 我在上面添加了评论并想给出答案,但我无法在评论中分享代码,所以我在 3 分钟后在答案中给出了解决方案,请参阅下文:)

标签: c# visual-studio envdte


【解决方案1】:

我做了如下:

    public static int OpenVisualStudio()
    {
        var devenv = Process.Start("devenv.exe");

        if (devenv == null)
        {
            return 0;
        }

        do
        {
            System.Threading.Thread.Sleep(2000);
            mDte = GetDte(devenv.Id);
        }
        while (mDte == null);

        return devenv.Id;
    }

我从这里得到它: http://blogs.msdn.com/b/kirillosenkov/archive/2011/08/10/how-to-get-dte-from-visual-studio-process-id.aspx

它暂时解决了我的问题...

【讨论】:

    【解决方案2】:

    DTE 对象具有 Debugger 属性,该属性具有 CurrentProcess 属性,该属性具有 ProcessID 属性。

    int processId = dte.Debugger.CurrentProcess.ProcessID;
    

    【讨论】:

    • dte.Debugger.CurrentProcess 不是调试器的进程(即 devenv),它是当前正在调试的进程。
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 2011-07-16
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多