Dotnet环境下的crystal report的部署

 

项目的需要,要使用crystal做报表显示,水晶报表功能就是强大,做的报表就是漂亮,不过在使用过程中经常会遇到一些问题,很是麻烦,最可气的是其随软件的帮助有时都会误导你。下面我将我这次的经历展示一下,以免同道再走我的弯路。

我的开发环境是win xp professional + visual studio for .net 2002 + crystal for .net

先是设计程序,设计报表rpt,关于怎么设计报表,这是个很复杂的事情,不过在这不是问题,也不是我要叙述的重点,反正我在上述环境下设计出来了一个可以显示报表的dotnet window应用程序,在这个开发环境下运行正常。

我尝试着把这个程序制作成一个MSI安装文件,然后去部署到没有visual studio for .net 2002 + crystal for .net的机器上。过程是这样的:

1.      vs.net中的当前当前解决方案中新建一个安装项目。

2.      添加一个项目输出,把上述那个程序项目的主输出加入。

3.      系统会把这个引入的项目的相关依赖项都包含到检测到的依赖项文件夹中,这些依赖项都会被打包到MSI中。

4.      build

以为系统会自动侦测出涉及到crystal for .net要使用到的组件,打包完后去目标机器安装(目标机器一共三台,分别是win98第二版,win2000 serverwin xp professional),结果三台机器安装完后运行结果一样,当显示报表时,出现一下错误:

 

Cannot find KeycodeV2.dll, or invalid keycode

 

查找vs.net带的MSDN,发现部署Crystal Reports 运行时的说明:

分发应用程序时,须确定您的安装中所需要的 Crystal Decisions 文件。您要包括的文件取决于是否在报表中使用图表、地图和其他公式语言函数,同时也取决于报表所用的数据源以及您希望向最终用户提供的导出选项。幸运的是,如果您在使用 Microsoft Installer (MSI),则可以在您的安装包中包括的合并模块 (MSM) 以简化分发。

MSI 合并模块可在“C:/Program Files/Common Files/Merge Modules”目录中找到。根据您正在分发的组件和语言,您可选用不同的合并模块。这些合并模块分为三类:托管组件、数据库访问和密钥号码。

托管组件 MSM 处理所有托管组件的分发,其中包括 Windows 窗体查看器、Web 窗体查看器和所有 Crystal Decisions 命名空间。对于使报表运行所需的所有其他文件,由数据库访问 MSM 处理其分发。其中包括数据库、导出和图表驱动程序。KeyCode MSM 处理 Crystal Decisions 密钥号码的安装,这样您的用户在查看报表时,就不会被要求注册他们的 Crystal 版本。

 

具体操作步骤:

1.      打开 Windows 应用程序。

  1. 在解决方案资源管理器中,右击 Windows 应用程序解决方案,指向添加,然后单击新建项目

  2. 添加新项目对话框中,选择项目类型窗格中的安装和部署项目,然后选择模板窗格中的安装项目。单击确定按钮。

  3. 在解决方案资源管理中,右击安装项目,指向添加,然后单击项目输出

  4. 添加项目输出组中,选择主输出,然后单击确定

将自动添加所有依赖项,如 Managed.msm

  1. 在解决方案资源管理器中,右击安装项目,指向添加,然后单击合并模块

  2. 添加模块对话框中,选择下列要添加到安装项目的合并模块,然后单击打开

    • Database_Access.msm

    • Database_Access_enu.msm

    • regwiz.msm

    • VC_CRT.msmVC_STL.msm 如果您部署的 Windows 应用程序使用 ADO.NET 数据集,则还需要包括 VC_CRT VC_STL 合并模块)

  3. 在解决方案资源管理器中,右击 regwiz.msm 文件,然后选择属性

  4. 属性窗口中,展开 MergeModuleProperties,然后在许可证密钥属性框中输入一个有效的许可证密钥(密钥AAP5GKS0000GDE100DS)。

注意   每当部署 Crystal Reports 应用程序时,必须提供许可证密钥。

  1. 生成菜单中,选择生成解决方案以生成应用程序。

按照上述步骤制作MSI安装文件,再次部署到目标机器(当部署到客户机或服务器时,应始终确保该计算机安装了 .NET Framework)。同样是安装到上述win98第二版,win2000 serverwin xp professional这三台机器,结果是:

1.        win98第二版,win xp professional这两台机器上运行正常,报表显示正常,报表导出也正常。

2.        win2000 server机器上安装正常,显示报表正常,可是一旦点击了报表显示器中的导出图标,整个程序就死掉了,在任务管理器显示未响应,只能强行关掉。

这个结果勉强还可以接受,大不了这个程序不在win2000运行就是了。不过又发现一个新的问题,就是导出的word文档跟在报表显示器中显示的不是严格一致的,有一些差别,而且这个差别到了不可忍受的地步:

1.        报表显示器中表格中的文字显示正常,在word中这些表格中的文字被转换成图文框中的,可是转换的图文框高度小了,导致了显示的文字的下面有一小部分显示不出来,效果就是一行文字都被吃掉了下面一部分。

2.        一张报表在报表显示器中显示的正好是一页纸,边距都很准确,可是导出的word文档,报表的内容的尾部跑到了页面以外。在设计crystal报表时页面设置是A4的,估计是导出到word文档时纸张的尺寸变了,不是A4了,而且导出的word文档的页面设置是暗的,不允许修改。

而这个软件中的报表一定是要导出到word的,这样的导出效果是不能接受的,于是想到是不是可是升级到crystal9 试试看。

crystal9是完全支持dotnet的,Crystal Reports 9 将其功能整合到了 Visual Studio .NET 集成开发环境 (IDE) 中,代替原先Crystal Reports for .net,从而增强了 Visual Studio .NET (VS .NET) 的开发效能。

安装了Crystal Report 9 Advanced Edtion 中文版,看vs.net的帮助中关于,看到crystal的信息显示为:Crystal Reports 9 for Visual Studio .NET,升级成功。

重新编译程序,在开发机器上运行程序,报表显示正常,主要是要看导出word文档显示是否正常,在报表显示器中点击导出按钮,导出word文档,结果是word文档显示同报表显示器中显示的报表一模一样,心中暗喜,问题解决了。

OK,现在要到部署的问题了。

安装Crystal Report 9 Advanced Edtion 中文版后,在vs.netMSDN中多了个Crystal Report 9文件夹,明显就是Crystal Report 9 Advanced Edtion 中文版带的帮助文档了。在其中找到了部署包含 Crystal Reports Windows 应用程序这个主题,这里给出的如何部署Crystal Reports Windows 应用程序说明跟vs.net本身带的crystal的部署说明基本一致,就是多了一点如果您部署的 Windows 应用程序使用 ADO.NET 数据集,则还需要包括 VC_CRT VC_STL 合并模块。这个说明,其实我的程序里就用了ADO.NET 数据集,就必须把VC_CRT VC_STL 合并模块打包进MSI,按照说明一步步的重新生成了一个MSI安装文件,安装到三台目标机器。

安装完毕,运行程序,显示报表又出问题了,报错:

 

load crpe32.dll failed

 

查遍了Crystal Report 9 Advanced Edtion 中文版的随机文档,帮助文件都查不出问题所在,无奈之下到crystal的官方网站support.crystaldecisions.com去查找有没有问题的答案,在上面找到关于Crystal Report 9的升级文档“Merge Modules for Simplified Chinese Crystal Reports 9 and .NET”的一个文件名为cr9netmergemodules_chs.zip的文件,是部署Crystal Report 9的合并包,加压这个文件,看其中的readme.txt文件,按其中的说明下载了这个合并包的详细说明文档cr9net_deployment.pdf

真是不看不知道,一看气死人。原来Crystal Report 9的部署跟随机的帮助文档说的完全不同,随机带的那个文档应该适用于Crystal Report for .net版本的,对Crystal Report 9的部署根本就不适用。

下面是cr9net_deployment.pdf说明中的部署Crystal Report 9的步骤:

  1. 打开 Windows 应用程序。

  2. 在解决方案资源管理器中,右击 Windows 应用程序解决方案,指向添加,然后单击新建项目

  3. 添加新项目对话框中,选择项目类型窗格中的安装和部署项目,然后选择模板窗格中的安装项目。单击确定按钮。

  4. 在解决方案资源管理中,右击安装项目,指向添加,然后单击项目输出

  5. 添加项目输出组中,选择主输出,然后单击确定

将自动添加所有依赖项,如 dotnetfxredist_x86_enu.msmdotnetcrystalreports.msm

  1. 需要将dotnetcrystalreports.msm排除在项目之外,在解决方案资源管理器中右击这个模块的右键,选择排除

  2. 在解决方案资源管理器中,右击安装项目,指向添加,然后单击合并模块

  3. 添加模块对话框中,选择下列要添加到安装项目的合并模块,然后单击打开

    • reportengine.msm,

    • crnetruntime.msm

    • license.msm

    • mapping.msm (可选,当在报表中使用了geographic maps时)

    • VC_CRT.msmVC_STL.msm 如果您部署的 Windows 应用程序使用 ADO.NET 数据集,则还需要包括 VC_CRT VC_STL 合并模块)

  4. 在解决方案资源管理器中,右击 license.msm 文件,然后选择属性

  5. 属性窗口中,展开 MergeModuleProperties,然后在许可证密钥属性框中输入一个有效的许可证密钥。

  6. 注意   每当部署 Crystal Reports 应用程序时,必须提供许可证密钥。

  7. 生成菜单中,选择生成解决方案以生成应用程序

OK,这回生成的MSI再到三个目标机器上安装后,结果如下:

1.      Win xp 的机器一切正常,显示,导出,导出的word文档都正常。

2.      Win2000的机器,还是那样,报表显示正常,可是一旦点击了报表显示器中的导出图标,整个程序就死掉了,在任务管理器显示未响应,只能强行关掉。

3.      win98第二版的机器,报表显示正常,但是一旦点击了报表显示器中的导出图标,出现一下错误:

文件内c:/windows/temp/temp_3bbd1e66-a59b-4001-a8e4-3ebfd436ab2d.rpt出错无效导出dll或导出格式。”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值