牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

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

转载自:http://xoyozo.me/blog/lnk1201-error-at-every-build.html

Windows 7 使用 VS.NET 2003 开发项目时经常会遇到类似如下错误:

TestServer fatal error LNK1201: 写入程序数据库“d:\Projects\GameServer\data\TestServer.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

在排除了空间、路径、权限等原因后仍然无法顺利生成项目,微软官方也没有提供相关的解决方案,Google 了好几天也找不到网友任何修复建议,今天偶然发现 MSDN 上一篇帖子,正是讨论这个问题,于是尝试按照上面的步骤进行操作,竟然真的可以!特分享给大家~

一、首先下载两个文件:Handle 和 freepdb

二、解压这两个压缩包,并把“freepdb.cmd”和“handle.exe”两个文件移至同一目录下(如 C:\LNK1201\);

三、用 VS.NET 2003 打开一个项目,在解决方案资源管理器中项目文件上点右键属性,展开“生成事件”,点击“预生成事件”,在右侧命令行中填入:<path>\freepdb $(ProjectName) ;

四、完成!运行一下看看吧。如果仍然有问题,先双击运行这两个文件试试,因为我是先运行后再配置项目属性的,所以不确定不运行会不会出错。

如果上述文件无法下载,请联系 xoyozo 索取!Have fun!


兔子同学提供了修改后可用的版本,其中包含了Handle.exe和FreePDB.bat:/Files/tx7do/LNK1201.rar

posted on 2011-02-12 15:08 杨粼波 阅读(4847) 评论(16)  编辑 收藏 引用

评论

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-02-13 09:56 zwp

感谢啊,这个问题困扰好久了。
不过刚刚新建个项目,又没有出现上述问题,待重现的时候一定要试试。
不过如果一个项目一个项目地添加link pre,太麻烦了,我直接放在外部工具里,应该也有效。
  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-02-13 10:16 杨粼波

哦?这样的么?
我之前用Windows 7 32位的时候,有的项目会有问题,有的不会,很是奇怪,我估计可能是权限的问题还是怎样的。

但是,我前几天换到了64位的操作系统以后,就有问题了,奇了个怪。说实话,让我每个项目都这样做,我也很烦。
但是,我现在每调试一次,就要关闭一次工程,这很烦人的。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-02-23 12:33 zwp

后来发现还是不行,没法确定工程生成的pdb文件名以及位置。除非所有的工程都是按照默认位置和名字来存放pdb文件。
于是,只有下了个GUI版本的procexp,手动强制关闭devenv.exe相关工程对应的pdb文件句柄。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-02-23 12:35 zwp

@杨粼波
要么自己为每个工程写一个prelink事件,通过命令行强制关闭被打开的pdb文件句柄,
要么在调试后链接前用procexp强制关闭下pdb的文件句柄。
  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案[未登录] 2011-02-23 20:59 杨粼波

都挺烦人的。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-03-12 16:44 兔子

freepdb.cmd的代码里面有问题。我修改了一下。现在可以了。等我传上来,这问题困扰我好久了  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-03-12 17:09 兔子

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
  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-03-12 17:11 兔子

今天闲着蛋疼。。。总算吧这个问题解决了。。。。。。。。。。。。。
网上所有的freepdb.cmd都有问题  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案[未登录] 2011-03-13 21:55 杨粼波

==!为啥蛋疼呢?  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-04-12 16:49 杨粼波

根据我的观察,每调试一次,pdb的句柄就增加一次,调试多次的话,此解决方案无效,纵使关闭掉了IDE打开的文件句柄,文件却无法做写操作。用VS2003在Windows7上面调试就是一个巨大的悲剧。
最好的解决方案是:调试一次,关闭一次IDE。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2011-10-17 16:22 烟圈

兔子的版本好使,不過啟動的時候注意要 管理員身份打開 vs  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2012-01-12 10:27 星爷

不想以管理员模式运行,兔子的版本无效。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案[未登录] 2012-01-14 21:08 杨粼波

我这里加载了很多dll,dll会有pdb文件,好像不会卸载。
擦,我现在是相当相当的痛苦!
非常的想把VS升级上去了。  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2012-10-19 16:07 李汉文

我今天下载后用了freepdb,可是我的是一下要打开同样的应用程序几个用来生成不同的程序的,然后按照上面说的方法试了以后,只打开一个还可以,再打开同样的文件的时候就出现了问题,前面打开的程序消失了。。。是不是就应该freepdb的原因,把我前面那个程序生成的PDB给删了??急求解哦@兔子
  回复  更多评论   

# re: Windows 7 使用 VS.NET 2003 时遇到“LNK1201: 写入程序数据库时出错”的解决方案 2014-04-22 14:45 9527

好的,管用  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理