Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案

转自: 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 和 freepdb

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值