转自: http://www.cppblog.com/tx7do/archive/2011/02/12/139938.html
Windows 7 使用 VS.NET 2003 开发项目时经常会遇到类似如下错误:
TestServer fatal error LNK1201: 写入程序数据库“d:\Projects\GameServer\data\TestServer.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够
在排除了空间、路径、权限等原因后仍然无法顺利生成项目,微软官方也没有提供相关的解决方案,Google 了好几天也找不到网友任何修复建议,今天偶然发现 MSDN 上一篇帖子,正是讨论这个问题,于是尝试按照上面的步骤进行操作,竟然真的可以!特分享给大家~
handle:http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx
freepdb : 原本给的是不对的,后来把兔子写的拿过来运行,问题就解决了,这里只给出兔子的版本:
首先新建一个freepdb.txt,把以下代码拷贝到文件中,保存后,将文件freepdb.txt改名为freepdb.cmd。
以下就是代码:
rem 在预生成事件里输入 比如 c:\lnk1201\freepdb.cmd ServerD
rem ServerD为你的被锁住的PDB名字,一般来说是exe名字而不是工程名。。。请注意
rem 不过你要是没修改输出exe名字。直接就是工程名也是对的
@echo off
if "%1"=="" (
echo Usage: freepdb filename
echo This will free all handles of VS2003 on filename.pdb
echo Requires the Handle utility from Windows Sysinternals
goto :eof
)
cd /d "%~dp0"
for /f "tokens=2 skip=5 delims=:" %%a in ('handle -p devenv.exe "%1.pdb"') do (
rem 寻找pid
for /f "tokens=1-2" %%b in ("%%a") do (
for /f "tokens=3 skip=5 delims=:" %%d in ('handle -p devenv.exe "%1.pdb"') do (
rem 寻找FileID
for /f "tokens=1-2" %%e in ("%%d") do (
rem 执行关闭命令
rem 此时%%b为pid
rem 此时%%f为fileid
handle -c %%f -y -p %%b %1 > NULL
)
)
)
)
exit /b 0
二、解压这两个压缩包,并把“freepdb.cmd”和“handle.exe”两个文件移至同一目录下(如C:\LNK1201\);
三、用 VS.NET 2003 打开一个项目,在解决方案资源管理器中项目文件上点右键属性,展开“生成事件”,点击“预生成事件”,在右侧命令行中填入:<path>\freepdb $(ProjectName) ;
这里需要注意到是:在预生成事件里输入 比如 c:\lnk1201\freepdb.cmd ServerD
ServerD为你的被锁住的PDB名字,一般来说是exe名字而不是工程名。。。请注意
不过你要是没修改输出exe名字。直接就是工程名也是对的
四、完成!运行一下看看吧。如果仍然有问题,先双击运行这两个文件试试,因为我是先运行后再配置项目属性的,所以不确定不运行会不会出错。
如果上述文件无法下载,请联系 xoyozo 索取!Have fun!
最后需要注意到是,要以管理员身份运行 VS.NET 2003