链接:致命错误LNK1104:无法打开文件'D:\ ... \ MyProj.exe'

时间:2010-10-11 13:00:03

标签: visual-studio visual-studio-2010 locking executable

使用Visual Studio 2010,当我在短时间内构建+运行我的应用程序时,我经常会收到以下错误。如果我等一两分钟再试一次就可以了。 Unlocker声称没有句柄锁定可执行文件。
如何发现锁定它的内容?
如果它是Visual Studio本身,我该怎么办才能使它停止?或者发布文件?

1>------ Build started: Project: MyProj, Configuration: Release Win32 ------
...
1>InitializeBuildStatus:
1>  Creating "Release\MyProj.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  All outputs are up-to-date.
1>  SomeFile1.cpp
1>ResourceCompile:
1>  All outputs are up-to-date.
1>LINK : fatal error LNK1104: cannot open file 'D:\...\MyProj.exe'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.94
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

16 个答案:

答案 0 :(得分:38)

今天重新安装后出现此问题。确保已启动Application Experience服务,但未将其设置为禁用。如果设置为手动,我相信VS会启动它。

答案 1 :(得分:13)

你可能有一个锁定可执行文件的迷路构建过程,并且它(杂散过程)没有得到清理。在这种情况下,关闭visual studio,打开进程资源管理器,并查找与visual studio相关的每个进程。 然后再次打开visual studio并尝试重建您的项目。

答案 2 :(得分:11)

我知道这已经很老了,但是我在修改Visual Studio 2010时遇到了同样的问题,所以其他人可能仍会遇到这个问题。

将我的项目路径添加到AVG防病毒设置中的“Exluded Items”似乎已经解决了我的问题。

尝试禁用任何防病毒/驻留屏蔽,看看它是否解决了问题。如果是这样,请将项目路径添加到AV配置中的排除目录。

答案 3 :(得分:5)

该文件可以被锁定,因为它现在正在运行。尝试使用任务管理器终止进程。

答案 4 :(得分:4)

您可能尚未关闭输出。关闭输出,清理并重建文件。您现在可以运行该文件。

答案 5 :(得分:4)

就像Jonathan所说,是的,重命名可以帮助解决这个问题。但是,例如。我被迫多次重命名目标可执行文件,这有点乏味而且不好。

问题在于,当你运行你的项目并且后来得到一个你无法构建你的项目的错误时 - 因为这个可执行文件(你的项目)仍在运行(你可以通过任务管理器检查它)。  如果你只是重命名目标版本,一段时间之后你也会得到同样的错误,如果你打开一个任务管理器,你会看到你用未完成的项目垃圾系统。

用于制作新构建的Visual Studio需要删除以前的可执行文件并创建新的而不是旧的,当可执行文件仍在运行时,它无法执行此操作。因此,如果要创建新的构建,必须关闭旧的可执行文件的过程! (奇怪的是,视觉工作室不会单独关闭它,是的,它看起来像是一些有害的行为)。

enter image description here

手动执行它有些繁琐,所以你可能只是一个bat文件,只要你遇到这样的问题就点击它:

taskkill /f /im name_of_target_executable.exe

它至少对我有用。 就像一个猜测 - 我没有在C ++中正确关闭我的程序,因此可能是视觉工作室保持它运行是正常的。

<强>此外: 由于没有完成申请,很有可能成为这样。检查你最后是否调用了PostQuitMessage,以便让Windows知道你已经完成了。

答案 6 :(得分:2)

我得出结论这是某种Visual Studio错误。也许C Johnson是对的 - 也许构建过程会使文件锁定。

我确实有一个可行的解决方法 - 每次都发生这种情况 - 我在项目属性下更改可执行文件的目标名称(右键单击项目,然后选择Properties \ Configuration Properties \ General \ Target Name)。

以这种方式,VS创建了一个新的可执行文件,并解决了这个问题。每次我这样做几次,我都会回到原来的名字,然后骑行~3个名字。

如果有人会找到解决这个问题的理由和解决方案,请回答我的问题,我可以将答案移到你的身上,因为我的解决方法就是。

答案 7 :(得分:2)

我遇到了同样的问题,但使用Codeblocks。由于这个问题,我退出了编程,因为每次我只是想把我的电脑扔出窗外。

我要感谢user963228,答案真的是一个解决方案。您必须将应用程序体验置于手动启动(您可以通过在Windows 7开始菜单中搜索服务,然后查找应用程序体验和单击属性)来实现。

这个问题发生在人们想要调整他们的Windows 7机器时,他们决定禁用一些无意义的服务,所以他们谷歌一些调整指南,大多数指南说应用体验是安全的禁用。

我认为这个问题应该与Windows 7问题相关联而不是VS问题,而且应该更加明显 - 我花了很长时间才找到这个解决方案。

再次感谢!

答案 8 :(得分:1)

只是为了向列表添加另一个解决方案,我发现Visual Studio(在我的情况下为2012)偶尔会锁定不同进程下的文件。

因此,在崩溃时,devenv.exe可能仍在运行并保留在文件中。或者(正如我刚刚发现的那样),vstestrunner或vstestdiscovery也可能会保留在文件中。

杀死所有这些流程,它可能会解决问题。

答案 9 :(得分:1)

我刚刚遇到与VS2013相同的问题,用C ++创建设备驱动程序,以上都没有解决问题。但是,我刚刚发现,在我的情况下,问题似乎与VMWare有关。

我正在运行VMWare工作站客户端,在我的整个C:驱动器上的VM上定义了共享文件夹。当我在VM设置上禁用共享文件夹时,VS2013能够愉快地构建我的.exe文件。

我的新流程是:

1)禁用虚拟机上的共享文件夹(虚拟机设置|选项|共享文件夹 - 并取消选中该复选框) 2)在主机PC上运行构建 3)重新启用共享文件夹(并从那里继续)

希望这可能有助于其他人。

(顺便说一句,您收到的错误是.exe(或其他文件)被锁定或需要管理员权限,但这是一个红色的鲱鱼 - 在我看来,VMWare共享导致这些文件显示为已锁定。)

答案 10 :(得分:1)

通常,这意味着您的程序已被锁定,并且可能无法通过任务管理器或进程资源管理器终止。我遇到了类似的情况,我的程序在运行期间有异常并触发了锁定程序的Windows错误报告。 对于Windows错误报告锁定程序的情况,您可以转到控制面板 - >系统和安全 - >操作中心 - &gt;问题报告设置以设置&#34;从不检查解决方案&#34;希望它有所帮助。

答案 11 :(得分:1)

对我来说,当我尝试在调试模式下构建时,它正在发生,但它在发布模式下运行良好。我将 Visual Studio 中的构建配置从 x86 更改为 x64,这对我来说效果很好,因为我在 64 位系统上运行。

答案 12 :(得分:0)

错误来自(至少有时)来自太长的路径。在我的项目中,简单地减少输出文件路径就可以完成工作: “属性/配置属性/常规/中间目录”

似乎我已达到250个字符的路径限制。

答案 13 :(得分:0)

使用Bjarne Stroustrup编程原理和实践使用C ++“FLTK”示例我得到了相同的错误但是在1小时之后我得到了一个想法,我跟踪了已经在项目属性中看到的一个库 - &gt;链接器 - &gt;输入 - &gt;额外的Dependencies,在我的情况下,我跟踪kernel32.lib以查看位于何处,并看到在不同的文件夹中有许多kernel32.lib。所以我开始复制那些文件夹中的FLTK库和我尝试过的最后一个。 Visual Studio 2013 Express发现fltkd.lib和代码有效。

在我的情况下,正确的路线是C:\ Program Files(x86)\ Windows Kits \ 8.1 \ Lib \ winv6.3 \ um \ x86

我不知道如何在Visual Studio中设置该路由。

在安装适用于Windows 7和.NET Framework 4(ISO)的Microsoft Windows SDK http://www.microsoft.com/en-us/download/details.aspx?id=8442

时,不确定是否创建了Windows工具包文件夹

希望能帮助你的人。

答案 14 :(得分:0)

我刚遇到同样的问题。有了我,exe仍在运行,但我不能用任务管理器结束它。只需重启VS,它对我有用。

答案 15 :(得分:0)

我的是,如果你设置MASM列表文件选项一些额外的选择,它会给你这个错误。

只需使用

 Enable Assembler Generated Code Listing   Yes/Sg
 Assembled Code Listing $(ProjectName).lst

没关系。

但是你有任何额外的问题。