无法从 Visual Studio 运行控制台应用程序:System.AccessViolationException

Posted

技术标签:

【中文标题】无法从 Visual Studio 运行控制台应用程序:System.AccessViolationException【英文标题】:Unable to run Console Application from Visual Studio: System.AccessViolationException 【发布时间】:2015-12-10 17:34:16 【问题描述】:

说明

当启动任何控制台应用程序时,代码在 AccessViolationException 上立即停止运行(附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏)。更多信息包含在下一节中。

技术症状

调用栈只包含外部代码:

异常:抛出:“消息过滤器指示应用程序正忙。>(来自 HRESULT 的异常:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))”(System.Runtime.InteropServices.COMException) 引发了 System.Runtime.InteropServices.COMException:“消息过滤器指示应用程序正忙。(来自 HRESULT 的异常:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))” 时间:12/10/2015 10:59:55 AM 线程:vshost.NotifyLoad[15344]

我创建了一个新的控制台应用程序,只包含 Console.WriteLine("Hello world!");

运行新的 Hello world 应用会导致相同的异常和相同的 调用堆栈。

背景

我怀疑这与问题无关,正如我将解释的那样,但我认为回答明显的问题很重要,“问题发生时你在做什么?”我所做的最后一项更改是在我的 Selenium 驱动程序中添加一个扩展,以从应用程序中退出热键:

    public static void logout(this IWebDriver Driver)
    
        Driver.FindElement(By.TagName("body")).Click();
        new Actions(Driver)
            .SendKeys(Keys.Control + Keys.Shift + "x")
            .Perform();
    

我还对我的一个项目的 App.Config 文件进行了更改,但恢复它也没有任何影响。

删除此代码(驱动程序扩展和/或 App.Config 更改)不能解决此问题。检索以前的签到并不能解决问题。我是目前唯一致力于此解决方案的人。

发现

如前所述,这发生在空的控制台应用程序中。 Windows 窗体应用程序启动正常。单元测试项目也可以正常启动。

研究

我花了好几个小时研究这个。似乎我研究过的每个类似问题都与仅调试或 .NET 版本有关。对我来说,问题也发生在 Release 上。此外,我一直在使用 .NET 4.5,在这方面没有任何问题或更改。我找不到任何似乎值得发布的文章,但我可能忽略了一些东西。

Visual Studio 信息

Microsoft Visual Studio Ultimate 2013 版本 12.0.30501.00 更新 2 .NET 版本 4.6.00081(只是注意到它在我的项目属性中显示为 4.5) 以管理员身份运行

反馈

从 devenv.exe /SafeMode 运行时,Visual Studio 加载

构造此框架的内容时遇到异常。此信息也记录在“C:\Users\UserName\AppData\Roaming\Microsoft\VisualStudio\12.0\ActivityLog.xml”中。

异常详情: System.UnauthorizedAccessException:访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED)) 在 Microsoft.VisualStudio.Shell.Interop.IVsShell5.LoadPackageWithContext(Guid& packageGuid,Int32 原因,Guid& 上下文) 在 Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.GetPackage() 在 Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.ConstructContent()

此外,在尝试运行时,我收到一条错误消息“尝试运行项目时出错:无效指针”(再次,VS in devenv.exe /SafeMode - 如果不熟悉,请参阅how to run visual studio without plugin and all third party feature)

如果我可以提供任何其他信息,请告诉我。

【问题讨论】:

SendKeys 肯定是为 WinForms 上下文而设计的。更准确地说,在 Windows 窗体消息泵内。编辑:看起来热键已安装在操作系统中。您可能想弄清楚该代码的作用。 所以只有在 IDE 中运行时才会出现这种情况?尝试在禁用插件的情况下运行 (devenv.exe /safemode) 您的驱动程序似乎正在使用并保持活动控制台进程,或者由于某种原因阻止它。如果它自动启动寻找禁用它的方法,我认为您的问题与您的代码无关,它与代码环境有关,尝试编译您的 hello world 应用程序并在另一台 PC 上运行它,如果它工作不是编译器,尝试以@AlexK 的身份运行不带扩展名的 VS。上文提到的。如果这种情况持续发生,请尝试使用 Windows 系统还原实用程序到最新更改之前的日期,如果它有效,那么您的本地系统环境已损坏,并且之前备份您的代码! @AlexK。 - 感谢您的反馈。我试过这个,加载时有一些不同的异常。 VS 尝试从 devenv.exe 执行时提示“尝试运行项目时出错:指针无效”。我在“反馈”标题下用这个更新了这个问题。再次感谢 @darkndream - 也感谢您的反馈。 HelloWorld 应用程序在另一台 PC 上运行良好。我将查看系统还原实用程序并发布结果 【参考方案1】:

这可能是因为当你命名项目时你不能放空格,我放了它们,它也给了我一个 AccessViolationException,尝试使用大写来分隔你的单词,但只能使用字母并且不能确定空格。

【讨论】:

【参考方案2】:

我在使用 Visual Studio 2010 时也遇到了这个问题。更有趣的是,我的解决方案中有几个项目(控制台应用程序、WPF 应用程序、Windows 窗体应用程序),但只有在我设置类型为“控制台应用程序”作为启动项目。以下更改最终帮助我确定了问题:转到控制台应用程序项目的项目属性->转到“调试”选项卡->转到右窗格中的“启用调试器”部分->选中“启用非托管代码调试”检查框,如下面的快照所示。我仍然不知道它发生的根本原因。唯一让我觉得可疑的是,前一天晚上我的机器上安装了很多 Windows 更新,其中大部分是办公室更新和操作系统更新(十几篇 KB 文章)。

【讨论】:

以上是关于无法从 Visual Studio 运行控制台应用程序:System.AccessViolationException的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Windows XP 上运行 Visual Studio 2012 程序

无法从特权运行的 Visual Studio 2010 拖放到调试的应用程序运行

为啥我的 exe 文件无法从 Visual Studio 2015 的调试或发布文件夹中打开?

如何从 Azure Function 中受益以在 Visual Studio 中运行我的控制台应用程序?

从 Visual Studio 2017 中调试 .Net Core 控制台应用程序

为啥 Visual Studio 2015 控制台运行程序无法识别 MSpec?