一直以来,受困于vc2005编译出来的程序在部署上还需要安装运行时库的困扰,迟迟不肯抛弃经典的vc6。终于在今日,寻找一下解决方案!
我们知道vc2005的编译增加了一个manifest,并通过该文件寻找DLL。所以,所谓的编译出来的程序不能做到绿色安装应该从这里入手。
第一种办法:既然他找不到dll,那我们就静态编译吧,把运行时库都编译进来那不就结了吗?
即:修改编译选项为静态库,如下图所示
如果是Debug就选/MTd 如果是Release就选/MT
如果用到了MFC那就还要修改一下
编译出的程序没有问题,拷到新安的xp自行自如
第二种办法就相对来说好一点点,即将运行时库拷贝到运行路径下或者是system32下也行(当然了,我们考虑到绿色版的问题,那肯定是放在程序当前目录了!),注意了,跟vc6只需要拷dll不同,你还得拷一个manifest。哪里拷呢?在vs2005的安装目录下有一个文件夹,如我默认安装是在
C:\Program Files\Microsoft Visual Studio 8\VC\redist,这里应该有一个debug版本还有一个release版本,具体看你的选择了
同样的如果你不使用mfc,你只需要拷贝Microsoft.VC80.CRT.manifest以及msvcr80.dll就可以了,注意了,这里有三个文件,具体选择哪一个就看你的字符集选项了,加上u的代表unicode。(注:本人不太喜欢u,还是gbk好啊,所以每建一个新工程,第一件事就是把字符集修改一下)
如果用了mfc,那还得C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC下的Microsoft.VC80.MFC.manifest以及mfc80.dll
总结:
以上两种办法都可以做到无须用户再安装运行环境,真正的绿色安装。
第一种办法,即静态编译运行库的办法,优点很明显,编译出来只有一个文件,拷哪里都可以,但是,我们知道静态编译的话,编译出来的文件相对较大,如,我做的一个helloWorld采用静态编译出来得有60多K,如果使用了mfc那至少得两M多,而且不使用动态链接库的话,占用内存相当较大。不过在如今,内存白菜价的今天,以及硬盘动不动就几百G也无所谓了。况且部署一个10k的软件跟2m的软件在用户看来是没有区别的
第二种办法,虽然单独文件不大,但是合起来应该也小不了,虽然是动态链接,但是,我在疑惑,他使用的是当前路径下的dll,那假设目标机器上安装了运行库,他会使用系统的还是当间目录下的哪一个呢?那假设使用的是当前路径下,那恐怕就节约不了内存了吧?
基于以上理解,我觉得,如果是给用户使用的小软件,而且追求绿色版,还是使用静态编译吧
相当vc2008以及vc2010应该也差不多吧