Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio Visual Studio为不同的操作引发相同的ComException?_Visual Studio_Com_Envdte_Vsix_Vspackage - Fatal编程技术网

Visual studio Visual Studio为不同的操作引发相同的ComException?

Visual studio Visual Studio为不同的操作引发相同的ComException?,visual-studio,com,envdte,vsix,vspackage,Visual Studio,Com,Envdte,Vsix,Vspackage,背景: 在我的VSPackage中,我有process.Attach()指令。我还将UAC(用户帐户控制设置)设置为默认级别: 用例: 当我以管理员权限运行示例应用程序时: 然后使用Visual Studio中的我的VSPackage以较低的当前用户权限(非管理员)连接到该进程,我得到以下COMException: 这是正确的,我想,并表明我没有授权执行这种附加操作 当我以当前用户身份运行示例应用程序时: 然后附加到它–一切都按预期工作(调试器已附加)。然后,如果在Visual Stud

背景:

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

用例:

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

    然后使用Visual Studio中的我的VSPackage以较低的当前用户权限(非管理员)连接到该进程,我得到以下
    COMException

    这是正确的,我想,并表明我没有授权执行这种附加操作

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

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

    HRESULT与以前相同

  • 问题:


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

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

    错误代码并不意味着“无法附加调试器”,也没有任何空间来明确解释为什么无法附加调试器。没有类似的,比如说,一个。所以你只是得到了一个不能做的诊断,而不是一个为什么不能做的诊断。这是最好的,因为它将得到,也许有一天他们会实现IErrorInfo,所以你至少会得到一个文本描述。更有可能的是,VisualStudio扩展模型将首先进行一次大的检修。这是风吹的方式,加载项在VS2013中被弃用