如何部署基于水晶报表10和Oracle10g的.NET应用程序
从去年3月就开始这个项目,到今天快2年了,各模块终于开发接近尾声,于是leader让我做一个安装程序。据微软说法,VS自带的安装部署工具功能强大,用来部署.NET程序最合适不过,另外网上也有不少成功的例子,于是偶就决定不使用第三方工具来做这个安装包。
因为VS做出来的安装程序的启动需要.NET框架库支持,所以需要一个非托管程序来检测用户电脑上是否安装了.NET Framework,如果未安装,则会提示用户安装,反之,则跳过框架安装步骤,启动MSI安装。微软提供的这个C++程序中,你可以在Main.h中控制.NET框架的安装模式,如下:
const TCHAR g_tszFxInstaller[] = _T("dotnetfx.exe"); // 框架库位置
const TCHAR g_tszLPInstaller[] = _T("langpack.exe"); // 中文语言包位置
// JueJue注释,在 2007-10-30 11:02
// 1. 动态安装方式,即弹出对话框,让用户选择是否安装.NET框架库
// 2. 这是静态安装方式,实现无提示安装.NET框架库
const TCHAR g_tszFxInstallerCmdLine[] = _T("/q:a /c:/"install /l /""); // 1
//const TCHAR g_tszLpInstallerCmdLine[] = _T("/q:a /c:/"inst /l /""); // 1
//const TCHAR g_tszFxInstallerCmdLine[] = _T("/q:a /c:/"install /l /q/""); // 2 无提示安装框架库
const TCHAR g_tszLpInstallerCmdLine[] = _T("/q:a /c:/"inst /l /q/""); // 2 无提示安装语言包
// msi install cmd-line
//
const TCHAR g_tszMsiCmdLine[] = _T("Msiexec /I /"%s/" REBOOT=ReallySuppress");
// reg key for fx policy info
// used to detect if fx is installed
// this key resides in HKEY_LOCAL_MACHINE
const TCHAR g_tszFxRegKeyRoot[] = _T("SOFTWARE//Microsoft//NET Framework Setup//NDP//");
你还可以在Main.cpp的WinMain中控制整个安装流程,比如加上自定义提示,去掉一些凡人的提示和异常处理,等等!然后编译,生成一个Win32应用程序,这个小程序会非常有用,稍后会讲到。
接下来,就是应用程序安装包的制作了!由于用到了Oracle10g和水晶报表10,所以需要以下文件
1. Oracle10g基本客户端组件 下载
2. 水晶报表10合并模块 下载
接着,按照下列步骤:
1. 新建一个安装项目,加入应用程序文件,COM组件,必需的注册表添加项,等等。
2. 添加合并模块,就是水晶报表10合并模块中的CrystalReports10_NET_EmbeddedReporting.msm,在属性项中填入注册码(可以在VS的帮助菜单中找到)。
3. 在文件系统(强烈建议在根目录Windows下)新建一个文件夹,用来存放Oracle10g基本客户端组件,为了不让用户手工注册环境变量和设置tnsnames.ora文件,你需要写一个程序来自动完成这些操作,当然你还可以把它嵌入安装程序包的自定义操作中,让用户在安装过程中,即完成环境变量和客户端的配置。
4. 在文件系统中,拷贝必需的COM组件。
5. 在注册表视图中,添加MDAC的启动条件。
需要注意的是,在自定义操作中,添加的.NET程序不要默认为Windos安装程序类,否则可能会引起安装异常。
检查各个设置细节,确保准确无误,编译,一切OK!你会发现在Debug目录下,生成了一个MSI文件和一个MDAC_TYP.exe文件以及一个settings.ini文件。
然后更改settings.ini文件,使它看起来是下面这个样子:
[Bootstrap]
Msi=XYHHIS2.0.msi
ProductName=医院管理信息系统V2.0
DialogText= 安装程序(医院管理信息系统V2.0)
CaptionText=医院管理信息系统V2.0
ErrorCaptionText= 安装遇到错误
FxInstallerPath=
BootstrapFx=true
LanguageID=1033
BootstrapMdac=true
MdacInstallerPath=
然后拷贝之前生成的Win32引导程序和.NET框架库以及语言包到MSI文件同目录下,这样,大功告成!
本程序在VS2003 和 Windows XP SP2下测试通过,安装程序在干净的Windows XP和Windows 2000中安装成功,程序运行正常!
参考: 把.NET程序部署到没有安装.NET Framwork的机器上
使用 Visual Studio .NET 2003 重新分发 .NET 框架