“无法打开文件”编译时错误

时间:2010-07-05 15:11:42

标签: visual-studio

问题描述:

偶尔在调试时,我收到以下错误。我正在使用visual studio 2010:

1>------ Build started: Project: projectName, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1104: cannot open file 'C:\Projects\projectName\Debug\projectName.exe'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

请注意projectName是我项目的名称。当我调试,进行更改和再次调试时发生错误(完成所有这些后,上面的错误显示而不是第二次运行程序)。

复制步骤:

  1. 创建一个新的空c ++项目,并将名为“main.cpp”的文件添加到sources文件夹
  2. 将以下代码复制到main.cpp:

    int main(){
        return 0;
    }
    
  3. 单击绿色调试箭头按钮,并记下程序的成功运行。确保它已关闭且调试会话已结束。打开进程资源管理器并确保项目的exe不再运行(如果是,请等到它关闭)。
  4. 删除main.cpp的内容并将其替换为此代码(或任何其他可以正确编译的代码,与上面使用的代码不同):

    #include<iostream>
    int main(){
        std::cout<<"hello\n";
        return 0;
    }
    
  5. 单击绿色调试箭头按钮。 IDE将显示致命的LNK1104错误,而不是运行程序。你现在已经复制了这个问题。
  6. 有关如何解决此问题的任何想法?


    其他详情:

    • 如果我在发生错误后尝试更改权限或删除projectName.exe,则会显示一个错误弹出窗口,其中显示:

        

      您需要获得执行此操作的权限

           

      您需要计算机管理员的许可才能对此文件进行更改

    • 我使用的是Windows 7。

    • 我使用的帐户是管理员帐户,但是当我使用非管理员帐户时,此问题也会完全相同。

    • 错误发生后2-3分钟,我无法重建或调试项目,但在大约那段时间后,我可以再次开始重新启动步骤。


    更新:BOUNTY

    任何能够提供解决问题的解决方案的人都会获得100次代表:)

    我已经尝试停止可能干扰VC ++访问文件的所有服务,进程和应用程序,但问题仍然存在。此外,以管理员身份运行vc ++也无济于事。

5 个答案:

答案 0 :(得分:7)

这很可能是Windows资源管理器的 bug 功能。

确保未在Windows资源管理器中选择/关注.exe文件。在Vista上,当链接期间在Windows资源管理器中选择可执行文件时,我经常会遇到LNK1104 - 错误。

如果这没有帮助,请检查没有其他程序“选择”该文件。

修改 This program可以显示哪个进程锁定了您的文件(这些页面包含指向其他“解锁”工具的链接)

答案 1 :(得分:4)

我遇到了一个我正在编写的新程序的问题,似乎只编译了一次,但在编译结束时和后续版本中都给出了错误。我的抗病毒程序BitDefender锁定了exe文件。我的exe是在发现的病毒列表中。我关闭Bitdefender 5分钟,重新编译,当Bitdefender重新启动或之后程序没有被锁定。

答案 2 :(得分:1)

您可以使用Process Explorer查看是否有任何进程对该文件打开句柄,即使可执行文件本身未运行。转到查找 - &gt;查找句柄或DLL ...并输入projectName.exe,它将为您提供打开它的所有进程的列表。

答案 3 :(得分:0)

当文件没有锁定时,我从未见过这种情况。你有任何可能仍然坚持的分析或测试工具吗?

注意:我无法重现。

编辑&gt;您是否尝试在程序运行时打开进程资源管理器(而不是任务管理器)?它会告诉你你的exe是否在任何其他进程中运行。

你检查过恶意软件吗?我最近有一个案例,其中一些恶意软件会引导在机器上运行的每个进程,并且任务管理器的信息量不大。

答案 4 :(得分:0)

我的猜测是某些东西锁定了文件。无论出于何种原因,VS都无法打开文件来编写编译输出。正如SnOrfus建议的那样,确保某些分析或测试工具不会打开。在尝试重建之前,我还会尝试在完成程序执行(调试或其他)之间等待几秒钟。您可能正在快速构建,以至于当VS尝试访问它时,调试器仍会锁定文件。