您的位置:首页 > 数据库

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

2013-06-06 16:40 246 查看
转自: 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐