程序在 Visual Studio 之外无法运行

Posted

技术标签:

【中文标题】程序在 Visual Studio 之外无法运行【英文标题】:Program doesn't work outside Visual Studio 【发布时间】:2015-05-08 17:02:22 【问题描述】:

我在这个应用程序中使用带有 P/Invoke 的非托管 dll,我总是在 Visual Studio 中测试它(在 x86 CPU 上使用调试模式,因为 dll 只是 x86),它工作得很好。但是当我在一段时间后手动启动 exe 时(可能是在第一次操作这些 dll 时,但我不确切知道)它说 exe 已停止工作,并开始检查解决方案(我使用 Visual Studio 2013 on Windows 8.1,如果这很重要)。我试图将 dll 作为现有项目添加到项目中,但这无济于事。我也知道,这不是因为它找不到那些 dll,因为如果我删除它们,它不会崩溃,只是冻结而没有任何错误消息。它在 Visual Studio 中的工作方式不应该与手动启动一样吗?

当我从 Visual Studio 运行时,还有一个奇怪的错误:一切正常,但有时 Visual Studio 突然停止调试,好像程序已关闭并且我的应用程序的 GUI 冻结,我只能通过以下方式关闭它关闭 Visual Studio(当我关闭它时,GUI 消失)。也许这是一个完全不同的问题,但它可以连接。

编辑:

这是github上的项目,如果有人可以检查它: https://github.com/geiszla/CycriptGUI

一些消息:如果我使用 Ctrl+F5 运行它,它也会崩溃。 F5 和 Ctrl+F5 有什么区别会导致这个问题?

【问题讨论】:

是否需要使用regsvr32注册DLL?您是否也尝试过在 VS 之外以管理员模式运行应用程序? 向您的应用程序添加一些日志记录。甚至在你的 main 周围进行一次 try-catch 以将异常/堆栈跟踪输出到控制台可能会帮助你大量调试你的东西。 @Ahmedilyas 这是一个 C 库,不是 COM 库,所以据我了解,我不需要注册它。 @Pierre-LucPineault 我试图将 updateTask 放入 try-catch,但没有帮助(我认为那部分是问题所在,因为我先使用那里的 dll,如果我删除更新任务开始部分它不会崩溃)。 (见上面的代码) 我遇到了这样的问题,在调试器下运行时它没有崩溃的原因是有问题的代码在这个if 语句中:if (System.Diagnostics.Debugger.IsAttached == false)。这是一个很长的镜头,但您可能想检查在附加到调试器时是否故意运行不同的代码。 【参考方案1】:

在 Google 上进行了全面搜索,没有真正简单的答案。这是伙计们(至少它对我有用而且很简单):

在 Visual Studio 中运行控制台应用程序时,查看底部的输出窗口,获取 ..\bin\Debug\*.exe 的位置

将 *.exe 和 *.config 复制到您想要的文件夹,运行它,它应该在 Visual Studio 中以相同的方式工作。

【讨论】:

【参考方案2】:

感谢大家的帮助,我的问题解决了:我调用了一个只有 2 个参数的非托管函数,而它有 3 个参数。但是我仍然不明白为什么它在调试模式下工作,而不是在没有调试的情况下工作。

【讨论】:

未定义的行为是个混蛋,很高兴它立即失败了,而不是 6 个月后在午夜为您最大的客户生产

以上是关于程序在 Visual Studio 之外无法运行的主要内容,如果未能解决你的问题,请参考以下文章

程序在 Visual Studio 之外运行时表现不同

在 Visual Studio 之外启动时程序运行速度较慢

WPF 应用程序在 Visual Studio 之外崩溃

无法激活 Windows 应用商店应用程序(Visual Studio 2015、Windows 10 版本 1511)

只有在 Visual Studio 之外运行 EXE 时才会出现发布错误

在 Visual Studio 2019 中运行 python matplotlibcpp