【问题标题】:Same COMExceptions thrown by Visual Studio for different actions?Visual Studio 为不同的操作抛出相同的 COMExceptions?
【发布时间】:2014-06-07 05:57:50
【问题描述】:

背景:

在我的 VSPackage 中,我有 process.Attach() 指令。我还将 UAC(用户帐户控制设置)设置为默认级别:

用例:

  1. 当我以管理员权限运行示例应用程序时:

    然后使用 Visual Studio 中的 VSPackage 在较低的当前用户权限(非管理员)下运行附加到此类进程,我得到以下COMException

    我认为这是正确的,表明我无权执行此类附加操作。

  2. 当我以当前用户身份运行示例应用程序时:

    然后附加到它 - 一切都按预期工作(已附加调试器)。然后,如果在 Visual Studio 的第二个实例中(也在同一个当前非管理员用户下启动)我再次尝试附加到同一个进程,我会关注COMException

    HRESULT 和之前一样……

问题:

如您所见,这两个不同操作的 HRESULT 相同。为什么?如何区分在第二种情况下我试图附加到调试器已经附加到的进程(这与第一种情况不同 - 附加到我们根本没有权限的进程)?

【问题讨论】:

    标签: visual-studio com envdte vsix vspackage


    【解决方案1】:

    HRESULT 是 COM 的弱点,错误代码不能很好地扩展。至少部分原因是 Java 吃掉了微软的午餐。

    错误代码仅表示“无法附加调试器”,没有任何空间可以明确解释为什么它无法附加。没有什么类似于InnerException。因此,您只需要对无法完成的事情进行诊断,而不是对无法完成的原因进行诊断。它和它一样好,也许他们有一天会实现 IErrorInfo 所以你至少会得到一个文字描述。更有可能的是,Visual Studio 扩展模型将首先进行大修。这是风吹来的方式,加载项在 VS2013 中已弃用。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2016-10-08
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      相关资源
      最近更新 更多