安装Delphi2009后,弹出“key不能为空”问题的解决办法。

根据“杯具橙子&自言自语”(http://hi.baidu.com/rarnu/blog/item/8d8e74cf8cce543af8dc61a0.html)中描述,他是这样解决的。
今天装上了Delphi2009 Update4,发生了一件比较麻烦的事
启动时提示“值不能为空,参数: key”。
原本以为是序列号的问题,但是我把光盘放到另一台电脑上安装,完全正常
换言之,这个“key”并非是指License Key
可能的出错范围一下子被放大了,只好硬着头皮去看D2009那复杂的Stack Trace
发现Stack的最上层是dotnetcoreide120.bpl抛出的异常,初步怀疑是这个bpl没有成功的安装
然后我试图把这个bpl拷去system32,以便让程序识别,但是无效
于是如此折腾了一天,最后只能怀疑是.NET Framework损坏了
于是删掉了.NET Framework,随便删掉了VS2008,再重新安装.NET2.0和D2009,就一切正常了

问题到这里还没有结束,我又重新装上了VS2008,发现也是D2009和VS2008都能正常运行
这个问题又变得复杂了起来。通过日志文件,终于找出了差异
原来问题是发生在VS2008 SP1上,我原先的系统打上了VS2008 SP1,并安装了VS SDK
SP1中有一项,是把.NET Framework 2.0更新为.NET Framework 2.0 SP2
就是这个SP2出了问题,其实不更新SP2,也是一样的,并不会对VS2008造成影响
更重要的是,不更新SP2,D2009就能正常安装
.NET2.0 SP2的更新中,会删掉一个GUID里的key值,但这个值恰恰是D2009所需要的

于是想了个简单的办法,先把GAC里,.NET2.0有关的东西卸载掉
然后去WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下,把里面的文件都备份出来
接着,更新VS2008的SP1直到它完成,然后把备份的文件覆盖回去,再把所有的dll拖进GAC
这样就搞定了,可以正常的安装使用D2009了,与此同时,VS2008也能正常使用

最后,换个角度思考一个小问题,为什么在VS2008打上SP1后,D2007能正常安装使用
而D2009就不行呢?难道说D2007使用的.NET 2.0可以是任意版本,
而D2009使用的.NET2.0却不允许打补丁,这不就等于拒绝进化么?
为什么D2009不会自动判断.NET的版本,然后再决定调用的内容呢?

另外再说一不大不小的事情,就是装了.NET Framework之后,千万别使用优化大师去清理注册表
不然的话,.NET会被它损坏,很多问题找都找不到,只能重装 
而我实际上只是“在bin目录下,把bds.exe.config改名,就OK了”。
posted @ 2011-11-09 20:57  怒杀神  阅读(603)  评论(0编辑  收藏  举报