我正在使用msbuild exec任务编译代码时调试自定义exe。
它运行以下代码:
HANDLE hFile = CreateFileA(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
Fatal(szFile, 1, "unable to open file (%x)", GetLastError());
szFile是由msbuild编译的dll / exe,它作为参数传递给程序。
我有时会看到以下错误:
unable to open file (20)
重建错误后再没有发生。根据Windows代码,错误代码20是:
ERROR_BAD_UNIT20 (0x14)
The system cannot find the device specified.
我不确定这是什么意思。似乎并不存在所讨论的文件,因为它确实存在。如果它没有错误代码将是" 2",我已经尝试过了。你知道什么会导致这个错误吗?感谢。
一些事情:
const char *szFile = nullptr;
...
szFile = argv[i]; // it loops over the arguments, parses them and finds the right argment for the file.
....
SetFileAttributes(szFile, FILE_ATTRIBUTE_NORMAL);
HANDLE hFile = CreateFileA(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
Fatal(szFile, 1, "unable to open file (%x)", GetLastError());
Fatal()只执行文件名和消息的printf。
答案 0 :(得分:2)
您以十六进制(%x
)而不是十进制格式打印错误代码。
错误代码0x20(十进制32)是ERROR_SHARING_VIOLATION
(“进程无法访问该文件,因为它正在被另一个进程使用。”)所以,是的,您对另一个打开文件的进程的猜测是正确的
在这种情况下,我怀疑是一种可能受病毒扫描影响的竞争状况。考虑让您的代码检测到此特定错误,并在短暂等待后重试。