error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错

最近使用visual studio 2005或visual studio 2008的编译项目时可能都遇到了这样的问题:

error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错

1>Project : error PRJ0003 : Error spawning 'C:\Windows\System32\cmd.exe'.
1>Build log was saved at "file://c:\Users\Gilbert\Documents\Visual Studio 2008\Projects\Helloworld\Helloworld\Debug\BuildLog.htm"
1>Helloworld - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

经过网上大面积搜索:

可能工程坏了

删除Debug目录下的东西, 重新编译整个工程

clean
rebuild
确定所谓的“工具”-〉“选项”-> "VC++项目设置"->"解决方案资源管理器模式"里的“显示所有设置”有没有勾选,只要勾上就会有“项目和解决方案”的选项,在该项目下逐行添加
$(SystemRoot)\System32
$(SystemRoot)
$(SystemRoot)\System32\wbem

都不能解决问题,我哭,呜呜呜呜呜

既然问题和'C:\Windows\System32\cmd.exe'有关,那就看看是不是它出了什么问题!

开始》运行》cmd

啊?居然不能运行!!!!

打开C:\Windows\System32文件夹,查找cmd.exe,文件存在啊,双击运行,居然提示:

Windows找不到文件!

我就晕,文件夹明明在那摆着,却告诉我找不到文件。

难道是文件坏了?

去另一个系统把文件复制过来覆盖,问题依旧; 还是搜索吧。

最后在一个网页快照中找到了问题的真正原因;

内容如下:

在运行中输入cmd无法运行,windows 找不到文件 'c:\windows\system32\cmd.exe

打开电脑,在运行框中输入CMD,不是吧,系统居然提示找不到CMD文件,如下图示:


点击确定又会弹出另外一个框:



原以为是系统变量设置出了问题,直接打开我的电脑,进入C:\WINDOWS\SYSTEM32\目录下,找到CMD.EXE直接运行,也是这样的情况!
马上进入到C:\WINDOWS\SYSTEM32\DLLCATCH\目录下,运行CMD.EXE文件,也是同样的提示:

运行command命令,虽然能弹出提示符状态,但是几乎所有的命令都不能用。用 GHOSTEXP.EXE 把原来备份中的CMD.EXE提取出来把 %SYSTEM% 和 %SYSTEM%\DLLCATCH 下的CMD.EXE文件覆盖掉,双击运行之后仍然是这样的提示。准备退出来的时候突然发现在C:\WINDOWS下有一个CDE.EXE.EXE莫非这个就是原来的CMD.EXE文件,只是被修改了名字换了个地方,但是双击之后仍旧不能运行。

注:%system%指的是C:\WINDOWS\SYSTEM32或者是C:\WINNT\SYSTEM32目录。更多的请参考:一文。

糟了,中毒了,用咔吧查,什么病毒都没查出来,具体的什么病毒都不知道,看来只能自己找资料手动解决这个问题了。很有可能就是一些病毒修改了注册表,于是在运行框中输入REGEDIT,居然弹出现面的提示:

连注册表业打不开了,会不会是系统的EXE文件关联被修改了,这个需要通过修改注册表来恢复。但是注册表现在又打不开,用记事本编辑注册表文件,再导入不就可以了么?
于是打开记事本文档,在里面输入以下内容(目的是允许当前用户运行cmd命令):
============================================
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"%1\" %*"
============================================
保存为cmd.reg(文件名可以任意),运行导入,结果弹出下面提示:

看来这个也不能用了,会不会是自己编辑注册表文件的时候输错了呢?带着这个疑问,我打开了另外一个注册表文件,也是同样的提示:


看来是病毒的原因了。
想通过批处理命令来对注册表操作,随便找了一个批处理命令双击,也不行:



头都有点大了,不知道该这么办了,突然想起来EXE文件虽然不可以运行,但是COM文件中应该可以运行吧!于是进入 C:\WINDOWS\ 把 regedit.exe 改名为 regedit.com 双击运行,即可打开注册表编辑器。
这下就可以修复文件关联了,具体的操作请参考:一文。
EXE文件关联修复之后,问题依旧,看来问题没有那么简单,不是EXE文件关联,那能是什么原因呢?
会不会是因为用户权限被修改的原因呢(在注册表中可以设置禁止用户运行批处理文件和CMD),于是打开注册表编辑器,进入HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System
新建一个双字节值项DisableCMD(如果没有的话,有的话直接修改其值就可以了,但要注意的是必须是双字节值,不是的话需要删掉重建),将其值设为 0 (这里的作用就是使用户可以运行cmd和批处理文件),当然它也有其它的参数:修改其值为2,则命令解释器和批处理文件都不能够被运行;如果只是禁止命令解释器的运行,而运行批处理文件的运行,则修改DisableCMD的值为1。这些大家可以自行试试!
当然也可以通过下面的注册表文件导入方法来实现(前提是等到注册表修复之后):
============================================
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System]
"DisableCMD"=dword:00000000
============================================
虽然权限也设置过了,但是问题依旧没有解决。真的有点不知道该怎么办了?呜呜…………


虽然还没找到彻底解决的办法,但是可以先给大家提供一个临时解决的办法,将系统中的CMD.EXE,REGEDIT.EXE,MSCONFIG.EXE文件的扩展名都改为COM基本上就可以暂时使用了!只不过要在运行框中输入命令时要带上COM扩展名。


找了这么久,终于找到原因了,原来是中了映像劫持病毒了,对于这种病毒只需要把映像劫持给关了就行了,可以通过修改注册表来实现:把[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]项删除即可。
好了,问题解决了,你改名的那些文件也该改过来了(把 COM 改回 EXE ),嘎嘎~~关于映像劫持方面的问题,过两天会给大家贴出来的!

把[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]项删除即可。

问题是这样的曲折!


你可能感兴趣的:(error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错)