“windows无法访问指定的设备.....”c ++中的错误

时间:2013-07-12 13:31:54

标签: c++ compiler-construction exe

我是视觉工作室2010的MFC人,使用visual studio创建一些可执行文件!!但在Linux和Mac上,我的可执行文件不像往常一样工作! 所以我决定使用“MinGW”编译器来创建可执行文件。

注意: - 请给我一个建议是,“minGW是交叉平台工作的最佳编译器吗?或者其他任何东西都存在?”

我在我的C盘上成功安装了WinGW编译器并开始使用以下程序..

#include <iostream>
using namespace std;
int main ()
{
  cout << "Hello ";
  return 0;
}

我使用以下命令

编译它

g ++ -static-libgcc -static-libstdc ++ Main.cpp

我在名为a.exe的同一个文件夹中找到了一个可执行文件。工作正常:)

但过了一段时间后,我决定按照以下方式修改相同的程序,

int main ()
{
  return 0;
}

我使用相同的命令编译它但是当我使用命令行执行它时它显示错误“访问被拒绝所以我转到该文件夹​​并运行与相同的可执行文件”以管理员身份运行“ 它显示一个消息框,消息窗口无法访问指定的设备路径或文件。您可能没有适当的权限

---编辑 -

以下代码无效: -

 int main ()
 {
      int k;
      return 0;
  }

但是这个程序工作: -

int main()
{
  int k;
  k = 0;
  return 0;
}

4 个答案:

答案 0 :(得分:2)

如果您收到此拒绝访问错误,则最可能的原因是可执行文件在另一个进程中打开,可能是链接器或调试器。尝试安装Process Explorer并点击Ctrl+F并输入您的.exe名称。这应该显示.exe文件打开的进程。杀死这些进程(或者如果你还在调试,那么先调试)。然后你应该能够再次构建。

请注意,这与Microsoft API无关,因为在任何情况下,您都在使用gcc。

编辑:如果没有进程持有.exe,那么可能存在其他类型的权限问题。 .exe文件是否存在?你能删除文件并重建吗?另一件事是运行Process Monitor并过滤.exe的名称 - 可能会显示常规权限被拒绝错误,或者可能是另一个错误,例如共享冲突。

答案 1 :(得分:1)

  

注意: - 请给我一个建议是,“minGW是最好的交叉平台工作编译器吗?还是其他任何东西都存在?”

没有。那里没有别的东西。

使用目标平台上可用的任何编译器,确保您的代码在所有这些编译器上编译。 不惜一切代价避免使用特定于平台和编译器的代码(使用跨平台框架)。

  

我成功安装了WinGW

不同网站提供了许多不同版本的mingw。如果你使用mingw-get从mingw.org安装编译器,它可能会工作。如果您从其他网站安装mingw,它可能会也可能不会。

  

我使用以下命令

编译它

使用构建系统。 cmake,qmake或类似的东西。

  

它显示错误“访问被拒绝

启动 process monitor ,看看它终止后的系统调用。您的防病毒软件也可能会干扰您的程序,或者您的路径中可能存在一些迷路dll。

答案 2 :(得分:0)

检查可执行文件所在的整个文件夹的权限。如果文件夹不允许权限,则尝试“以管理员身份运行”没有任何效果。

答案 3 :(得分:0)

它与您的代码没有任何关系。这是一个环境问题,对于您的用户帐户对硬盘上的一个或多个目录的权限,这一点很糟糕。通用诊断是程序的默认工作目录不允许读取或列表访问。

可能的起点是使用资源管理器并右键单击安装MinGW的目录。使用“安全”选项卡,确保您的用户帐户已启用所有权限。进一步缩小范围,尝试从命令提示符运行程序,使用不同的目录作为默认目录。