千万不要以为不经过研究,就可以在二、三秒内作好一个安装程序,多数情况下,Windows环境中的所有程序都比程序员预计的情况要复杂得多。例如:本书中的所有例子都依赖于C运行时库文件,到目前为止我还没有提到在应用程序中加入这些文件,源代码中也没有对它们的引用,这是因为第一次安装Visual C++时,已自动放在SYSTEM目录下,关联是自动进行的,在设计应用程序时不需要了解。对MFC文件和数据库应用涉及的文件情况相似,Visual C++即使没有完全地却也基本上帮你增加了所需的文件。然而,现在要做的是将应用程序完整打包提交给最终用户,这时你再也不能无视这些文件的存在了----它们也是应用程序的一部分,必须放在打包之中。问题是如何找出应该包含哪些文件呢?
找出应用程序应该包含的所有DLL 非常费时间,特别是当使用测试错误的处理方法时更是如此。然而,你可以使用如下的三种方法来进行测试错误处理:
方法一 使用Windows QuickView 程序查看应用程序的Import Table表项,Import Table列表列出了应用程序所有用到的DLL。下页图(上)是我们在第2、3、15章介绍过的Sngl_Doc程序的QuickView程序列表,它不仅显示了该应用程序用到了哪些文件,而且给出了其中的函数。 方法二 如果程序需要可以使用DumpBin 程序给出DOS命令行方式显示的程序列表。用起来略微有点儿麻烦,但却常常可以发现QuickView发现不了的文件。而且它提供了更多的选项,可限定查找信息的种类,输入命令格式为:DUMPBIN /IMPORTS SNGL_DOC.EXE。下页图(下)是输出结果(这是个命令行程序)。
技巧 使用DumpBin实用程序时可能会遇到系统报出缺少文件的信息,如果使用的是安装时的缺省设置,那么MSDIS100.DLL 和MSPDB50.DLL文件都在Program Files/DevStudio/SharedIDE/bin目录下,在DumpBin的执行过程中需要用到它和VC/bin目录下的LINK.EXE文件。
方法三 如果有最新版的Windows SDK,就会看到Depends实用程序,用它就可以找出程序中用到的DLL。

找出这样一个文件清单还不是文件收集过程的结束,还需要找出相关的全部DLL文件。显然像USER.EXE文件这样安装Windows时就具有的文件不用包含进去,但必须找出那些没有的文件。总而言之,必须手工地检查每个文件及其相关文件,确保都包含在应用程序的打包中。

技巧 先仔细审查一下只装过Windows的机器中有哪些文件,如果以后要建立多个安装程序,这个文件清单就很有用了。
当应用程序文件清单完整之后,把它们放在一起,拷贝到装有更高版本的Windows的机器中,检测是否兼容。当缺少文件或是文件不在SYSTEM目录下时,就会看到警告信息。一定要保证放在SYSTEM目录下的文件必须到位,因为将来用户使用起来也是这样。
注释 尽量将全部DLL文件放在应用程序目录下,而不是在SYSTEM目录下,这样有助于删除程序的实现。而且会少受用户安装的其它程序的干扰,例如:所用到的某个DLL在其它程序中也用到了,而且是个老版本的,安装时会把你的新版本DLL给覆盖了。