Visual Studio针对不同的操作抛出相同的COMExceptions?

时间:2014-04-22 17:47:20

标签: visual-studio com envdte vsix vspackage

背景:

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

enter image description here

使用案例:

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

    enter image description here

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

    enter image description here

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

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

    enter image description here

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

    enter image description here

    HRESULT和以前一样......

  3. 问题:

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

1 个答案:

答案 0 :(得分:1)

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

错误代码并不意味着超出"无法附加调试器",没有任何空间可以明确地解释为什么它无法&# 39;不要附上与InnerException没什么相似之处。因此,您只需要对无法完成的操作进行诊断,而不是诊断为什么无法完成。它可以获得它,也许它们有一天会实现IErrorInfo,所以你至少得到一个文本描述。更有可能的是,Visual Studio扩展模型将首先进行重大改革。风是吹的方式,VS2013中不推荐使用加载项。