今天装上了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会被它损坏,很多问题找都找不到,只能重装