背景:
在我的VSPackage中,我有process.Attach()
条指令。我还将UAC(用户帐户控制设置)设置为默认级别:
使用案例:
当我以管理员权限运行示例应用程序时:
然后使用我在较低的当前用户权限(非管理员)下运行的Visual Studio中的VSPackage附加到此类进程,我得到以下COMException
:
我认为这是正确的,并表示我无权执行此类附加操作。
当我以当前用户身份运行示例应用程序时:
然后附加到它 - 一切都按预期工作(附加调试器)。然后,如果在Visual Studio的第二个实例中(也是在相同的,当前的,非管理员用户下启动),我再次尝试连接到同一个进程,我会关注COMException
:
HRESULT和以前一样......
问题:
正如您所看到的,这两种不同的动作的HRESULT是相同的。为什么?如何区分这样的事实:在第二种情况下,我试图附加到已经附加调试器的进程(这与第一种情况不同 - 附加到我们根本没有权限的进程)?
答案 0 :(得分:1)
HRESULTs是COM的弱点,错误代码不能很好地扩展。至少部分原因是Java吃了微软的午餐。
错误代码并不意味着超出"无法附加调试器",没有任何空间可以明确地解释为什么它无法&# 39;不要附上与InnerException没什么相似之处。因此,您只需要对无法完成的操作进行诊断,而不是诊断为什么无法完成。它可以获得它,也许它们有一天会实现IErrorInfo,所以你至少得到一个文本描述。更有可能的是,Visual Studio扩展模型将首先进行重大改革。风是吹的方式,VS2013中不推荐使用加载项。