开发环境是vs2003,原先用的是vs自带的水晶报表,部署安装都没有问题,该加的合并模块我也都加过了,打包出来的安装程序安装到客户端也没有问题。因为后来用到子报表,vs自带的水晶报表会出现bug,所以就想用9.2版本的水晶报表,安装了一个crystal report 9.2 .net server的程序,然后就有了以下目录和文件C:\Program   Files\Common   Files\Crystal   Decisions\2.0\ ,\winnt\assembly 下面的水晶报表的版本也已经是9.2版本的了项目中之前使用的水晶报表的dll我也全部换成9.2版本的了,工具栏中我把9.2的组件加进去,并且取消了9.1组件前面的勾。再次部署安装后,build出来的安装文件装到一台干净的机器上windows 2003(没有装水晶报表),所有报表都不能使用,出现load crpe32.dll   failed的系统错误
我发现安装程序生成了C:\Program   Files\Common   Files\Crystal   Decisions\1.1\的文件夹和文件,但是没有生成2.0的文件夹和文件。然后我在那台windows 2003的机器上安装了crystal report 9.2 .net server的程序,生成了2.0的这个文件夹,再次使用该程序中的水晶报表时就没问题了。请问要怎么做才能把9.2的打包进去呢?使得安装程序会生成C:\Program   Files\Common   Files\Crystal   Decisions\2.0\

解决方案 »

  1.   

    之前我在做VB的时候就遇到这个情况,我的做法是把水晶报表安装目录下的所有dll文件打包在安装包里(也不会很大的)
    1. 去水晶报表官方网站去下载水晶报表组件安装包,还有一些补丁是专门针对打包时会漏掉部分dll的补丁的;
    2. 打包时把crpe32.dll这个文件打包过去,保险一点就全部把Crpe32.dll同目录下的文件都打包过去。因为有时候dll调dll的会漏掉的,你还可以检查一下你的dll引用时是否是copy local = true;
    3. 在用户的电脑上安装水晶报表(哈哈~~ 这个应该不可行的)
      

  2.   

    把所有dll打包的话,怎么保证C:\Program   Files\Common   Files\Crystal   Decisions\2.0\这个目录结构呢?
    不能保证的话对程序的运行会不会有影响啊?