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

54

使用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 ==========

这可能是与静态库(.lib)文件相关的此处报告的问题相同的问题。 - Cody Gray
2
特别是,请检查“调试->常规”中是否禁用了“启用.NET Framework源代码步进”。这对我有用,尽管我看到的是静态库而不是可执行文件。 - Skrymsli
谢谢,@Skrymsli,禁用 "启用.NET Framework源代码步骤" 对我有用。我使用此解决方法更新了 Cody Gray 链接的 connect 页面。 - Helge Klein
17个回答

40

今天重新安装后遇到了这个问题。确保“应用程序体验”服务已启动且未设置为禁用。如果它被设置为手动,我相信VS会自动启动它。


6
应该将这个设为正确答案。你刚刚帮我避免了重新安装Windows!我之前禁用了应用体验服务,但VS一直报错。我又启用了它,现在一切都正常了。 - stelonix
1
我一直在尝试用C++和C#解决这个问题。以前我必须手动清除EXE文件。这个提示解决了我的问题。谢谢! - Rachael
谢谢你的提示,我在一个CI机器上遇到了这个问题,并将“应用程序体验”服务设置为“自动”,然后启动它。之后没有任何问题,似乎一些对系统的更改,如某些程序(卸载)安装、功能更改或政策可能会导致这种情况。 - Lothar
呃,这个确实可以用,但是!应用程序体验查找服务是什么,为什么我要安装它?如果我的程序不兼容,我宁愿让它们简单地失败,也不想费力去让它们工作...尤其是我不希望没有理由地锁定随机可执行文件。 - ebyrob

18

我知道这已经很老了,但我刚遇到了同样的问题,我的Visual Studio 2010已经打好了所有的修补程序,因此其他人可能仍然会遇到这个问题。

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

尝试禁用任何反病毒/常驻屏蔽并查看是否可以解决该问题。如果可以,请将项目路径添加到AV配置中的排除目录中。


1
就是这样。我打开了我的杀毒软件(Avira),最后发现的文件正是我的.exe文件。所以是杀毒软件在阻止它。谢谢! - mihai
对我来说,这真的是个问题,我在Bitdefender中排除了Visual Studio项目路径,现在它运行得很好,谢谢。 - bouqbouq
谢谢。对我来说问题出在 Malwarebytes 上。 - DominicM

14

可能是某个无关的构建进程正在锁定可执行文件,但是(这个无关进程)没有被清除。在这种情况下,请关闭Visual Studio,打开Process Explorer,并消除与Visual Studio相关的所有进程。然后再次打开Visual Studio并尝试重建项目。


这对我来说是一个非常常见的问题,你详细描述的过程每次都太繁琐了。还有其他的想法吗? - Jonathan Livni
1
@Jonathan 写一个脚本?;) - Hi-Angel

6

就像Jonathan所说的那样,重命名可以帮助解决这个问题。但是,例如,我被迫多次重命名目标可执行文件,这很繁琐且不好。

问题在于当您运行项目并稍后出现无法构建项目的错误时 - 这是因为此可执行文件(您的项目)仍在运行中(您可以通过任务管理器检查)。如果您只是重命名目标构建,一段时间后您将再次收到相同的错误,并且如果您打开任务管理器,您将看到您的未完成项目正在浪费系统资源。

为了制作新的构建,Visual Studio需要删除先前的可执行文件并创建新的可执行文件来代替旧的,它无法在可执行文件仍在运行时进行操作。因此,如果您想进行新的构建,则必须关闭旧的可执行文件进程!(奇怪的是Visual Studio没有自动关闭它,看起来像是一些错误的行为)。

enter image description here

手动执行这个过程非常繁琐,因此当您遇到此类问题时,您可以使用bat文件并单击它:

taskkill /f /im name_of_target_executable.exe

至少对我来说它有效。 就像一个猜测 - 我没有正确关闭我的C++程序,所以Visual Studio可能会保持它的运行。

补充: 很有可能是由于未完成的应用程序导致的。请检查是否在最后调用了PostQuitMessage,以便让Windows知道您已经完成了。


5

该文件可能因正在运行而被锁定。请尝试使用任务管理器终止进程。


4

您可能没有关闭输出。请关闭输出,清理并重新构建文件。现在您可能可以运行该文件。


2
我认为这是一种Visual Studio的bug。也许C Johnson是正确的——可能是生成过程锁定了文件。
我有一个可行的解决方法,每次出现这种情况时,我都会更改项目属性下可执行文件的目标名称(右键单击项目,然后选择"属性"\ "配置属性"\ "常规"\ "目标名称")。
通过这种方式,VS会创建一个新的可执行文件,从而解决问题。每隔几次更改后,我会恢复原始名称,这样就可以循环使用大约3个名称。
如果有人找到原因和解决方案,请回答,我可以将答案移动到你的答案下,因为我的只是一个临时方法。

不要啊,我已经改了25次名字了,现在每次编译之前都需要重新命名。 - Tebe
固定的,不更改名称,我猜你对问题的原因很感兴趣,我添加了答案。 - Tebe

2

我曾经遇到过同样的问题,但是使用Codeblocks。因为这个问题,我放弃了编程,因为每次都想把电脑扔出窗外。

我要感谢用户963228的答案,真的解决了这个问题。您需要将“应用程序体验”设置为手动启动(您可以通过在Windows 7开始菜单中搜索服务,然后找到“应用程序体验”并单击属性来完成)。

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

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

再次感谢!


1
我刚刚遇到了与VS2013创建C++设备驱动程序相关的问题,但以上方法似乎都无法解决。但是,我发现在我的情况下,问题似乎与VMWare有关。
我正在运行一个VMWare工作站客户端,并在整个C:驱动器上定义了一个共享文件夹。当我在VM设置中禁用共享文件夹时,VS2013就可以愉快地构建我的.exe文件了。
我的新过程是:
1)在vm上禁用共享文件夹(VM设置|选项|共享文件夹-取消复选框) 2)在主机PC上运行构建 3)重新启用共享文件夹(并从那里继续)
希望这可能会对其他人有所帮助。
(顺便说一句,您收到的错误是.exe(或其他文件)被锁定或需要管理员权限,但这是一个误导 - 在我看来,VMWare共享导致这些文件出现为锁定状态。)

1

为了给列表添加另一种解决方案,我发现 Visual Studio(在我这里是2012)偶尔会在不同的进程中锁定文件。

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

结束所有这些进程,可能会解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接