【发布时间】:2014-03-10 13:46:47
【问题描述】:
我在 Win 7 上使用 VS2013 Pro,并且有一个可以在 bin/x86/Debug 文件夹中编译和运行良好的应用程序(无论有没有调试器),但是在屏幕上或日志中没有消息的情况下立即崩溃,如果复制到任何其他文件夹。
换句话说,如果 exe 的完整路径在编译后以任何方式改变结构,它就会停止工作。路径中的文件夹名称可以更改,但结构不能更改。
我知道这听起来像是某种相对路径的东西,也许确实如此,但我一直没能发现它在寻找什么。
关于正在发生的事情的一个奇怪线索可能是这样的;如果我在没有运行的文件夹中右键单击 exe,然后选择“疑难解答兼容性”,然后选择“尝试推荐的设置”,然后“启动程序...”,它运行正常。
该应用程序本身是 .NET Framework 4 Winforms,它引用了几个 System.* DLL 和一个由同一 VS2013 解决方案中的 C++ 项目生成的 DLL(编译时不会出错)。
那么,这里发生了什么?我可以使用一些想法...
【问题讨论】:
-
您是复制整个文件夹还是只复制 .exe?如果 exe 依赖于 dll,那么出于显而易见的原因,您也必须复制 dll。
-
我复制了整个 Debug 文件夹。我尝试将文件夹添加到 c:\temp 和 c:\Program Files (x86),结果相同。
-
尝试更改应用程序和 dll 的目标平台。他们应该都匹配。 64位或32位。 “任何 CPU”都有可能破坏 64 位机器上的应用程序,否则您可能需要研究 winDBG。
-
嗯... C++ DLL 的目标平台是 Win32,应用程序的目标是 x86。 VS 似乎没有提供 x86 作为 DLL 的目标选择。唯一的选择是 Win32、ARM 和 x64。另一个 SO 线程说 Win32 与 VS2012 中的 x86 含义相同,所以我认为它在 VS2013 中也意味着相同。该应用程序提供任何 CPU、x64 和 x86。
-
您是否要向磁盘写入内容?如果您的应用程序没有以管理员身份运行,您将无法在 Program Files 和 C 上除您的用户文件夹之外的任何其他文件夹中写入。您还可以在以管理员身份运行启动 exe 时检查并查看是否有效。
标签: c# c++ visual-studio compatibility