快速搞定 vs 编译错误之 cs1583 —— xxx 不是有效的 win32 资源文件

缘起

之前写了一个小工具用来处理 .rc 文件,有些地方需要优化,周末准备继续优化一下。没想到,遇到了一个意想不到的错误—— xxx.tmp 不是有效的 win32 资源文件。 本文总结了使用 process monitor 快速定位此问题的过程。

初遇错误

优化好代码后准备编译验证,没想到遇到了下图中的错误。

cs1583-invalid-win32-resource

说实话,看到这个错误我是懵逼的。 CSC5A262FDC58864A1891AD4252B55132.TMP 不是有效的 Win32 资源文件。这个 .TMP 文件是什么鬼?难道被我不小心破坏了?不管三七二十一,先删除,重新编译,看看是否还会报错。

不出所料,还是会报这个错误。

赶紧细看一下工程文件,这个报错的工程也没有使用任何资源文件啊。

no-resource-file-used

搞不懂,先用 process monitor 看看再说。

process monitor

启动 process monitor,在 vs 中重新编译,报错后停止监听,通过 Tools -> Process Tree... 打开进程树,快速浏览到关键进程(盯着 Life Time 列看,一般编译涉及到的子进程生存周期都很短)

view-process-tree

看到 cdb.exewindbg.exe ,我一下子就明白是怎么回事了。之前为了调试 cvtres.exe 相关逻辑的时候,我通过 gflags.execvtres.exe 设置了 Image File Excute Option

解决

通过 gflags.exe 去掉对 cvtres.exe 的相关设置即可。

总结

这个问题虽然刚开始看报错信息的时候一头雾水,但是使用 process monitor 很简单就解决了。

BianChengNan wechat
扫描左侧二维码关注公众号,扫描右侧二维码加我个人微信:)
0%