您的位置:首页 > 数据库 > Oracle

如何用VS2008打包发布含Oracle数据库客户端的程序

2011-11-14 15:24 393 查看
原帖地址http://www.cnblogs.com/ValiancyHe/archive/2011/11/04/2235855.html

这些天来帮导师做一个用了oracle数据库的winform程序,快要竣工了,琢磨怎么打包发布,网上资料前篇一律,为此深刻鄙视那些复制粘贴的文章,简直浪费搜索页面,本文借鉴过部分网上资料,但是绝对是亲身试用过的。

进入正题:

一 建立安装程序项目:右键解决方案->添加->新建项目,在弹出的新建项目面板中选择 其他项目类型->安装和部署,在模板中选择安装项目。



单击确定,安装部署项目已经建好。

二 对项目文件进行打包:右键安装项目setup->视图->文件系统



三个文件夹分别对应在目标机器上运行安装程序后相应的文件夹,用户程序菜单是对应电脑上点击“开始”后的程序菜单,桌面则是对应桌面,这两个地方一般都是建立快捷方式的,打包主要就是把必要的文件放进应用程序文件夹,右键应用程序文件夹->添加->项目输出,选择你想打包的项目,一般就是主运行输出为exe的项目,这个大家应该都懂,点击确定后项目主输出添加完毕,一般来说系统会自动把必要的相关文件以及dll组件都添加进去。



三:对oracle数据库进行打包:第二步如果是简单的项目基本上打包就结束了,但是我们还要添加oracle客户端,因为必须的有这个客户端才能远程连接oracle数据库。oracle公司还是想的比较周到的,提供了精简客户端oracle instant client给我们打包用,这个可以上oracle公司官网下载。把压缩包下载下来,解压,然后从安装的客户端那把oracle.key和tnsname.ora文件拷到解压文件夹下,基本文件目录如下,我的是instant client 11.2:



把这些文件全部添加到应用程序文件夹,具体做法是在应用程序文件夹下新建文件夹,名字可以自己取,我的就是OracleClient,然后右键OracleClient->添加->文件,把刚才解压文件夹下的文件全部选上添加进去,



至此,oracle的客户端也打包进去了,监听文件tnsname.ora也有了,可是oracle客户端使用还需要配置环境变量,具体就是把oracle那些文件所在目录添加到系统变量的path中,以及添加一个TNS_ADMIN的变量,其值为tnsname.ora的所在目录,按照我们的打包方式,这两个目录都应该是程序的安装目录+\OracleClient,但是我们不能告诉用户自己去配置啊,需要程序在安装过程中就写好这两个系统变量,这就需要写注册表了,还需要获得程序的安装目录,这个是最麻烦的,也是我在自己的打包过程中最费劲的。下面就来说说该怎么做。

四 配置环境变量:

首先在解决方案中添加新建项目,添加类库项目,把项目自带的class1.cs删掉,然后右击该项目,添加新建项,选择安装程序类



安装时用来配置环境变量的类库结构:



installer中的代码如下,部分代码后面解释,

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Windows.Forms;
using Microsoft.Win32;

namespace SetEnvironment
{
[RunInstaller(true)]
public partial class SetEnvironmentInstaller : Installer
{
public SetEnvironmentInstaller()
{
InitializeComponent();
}
public override void Install(System.Collections.IDictionary stateSaver)
{
string oraclePath = this.Context.Parameters["targetdir"].ToString() + "OracleClient";
base.Install(stateSaver);
SetEnvironment(oraclePath,oraclePath);
}
private void SetEnvironment(string path,string TNS_ADMIN)
{
try
{
using (RegistryKey environment = Registry.LocalMachine.OpenSubKey(@"SYSTEM\ControlSet001\Control\Session Manager\Environment", true))
{
String pathValue = path +";"+ environment.GetValue("Path").ToString();
environment.SetValue("Path", pathValue);
string search=environment.GetValue("TNS_ADMIN", string.Empty).ToString();
if (search == string.Empty)
{
environment.SetValue("TNS_ADMIN", TNS_ADMIN);
}
else
{
string value = TNS_ADMIN +";"+ search;
environment.SetValue("TNS_ADMIN", value);
}
}
MessageBox.Show("配置环境变量成功");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}


完了之后生成dll组件,回到安装项目,再次在应用程序文件夹下添加项目输出,跟之前步骤一样,不过这次选择刚才的用来配置环境变量的类库项目,类型还是主输出



然后右击安装项目setup->视图->自定义操作,将setenvironment输出添加到自定义操作那,具体操作是右击自定义操作的安装->添加自定义操作,进入应用程序文件夹下选择项目中的项目,选择setenvironment的项目,点击确定完成添加,





右击“主输出来自SetEnvironment(活动)”,选择属性窗口,在customActionData项添加值/targetdir="[TARGETDIR]\"



回到上面的代码处,添加这个参数是为了在上面的代码运行时可以获得程序的安装目录,修改注册表的那些代码读者们可以自己琢磨一下,打开注册表看看就知道了,至此,项目打包基本结束,数据库的打包也完成了,不过安装完后需要重启电脑环境变量的修改才能生效,程序才能连上数据库

五 顺便把如何添加卸载功能也写上吧:

在应用程序文件夹下把msiexec.exe添加进来,右键添加文件,在C:\Windows\System32目录下找到msiexec.exe添加即可,创建msiexec.exe的快捷方式,把快捷方式剪切到别的地方,用户桌面或者用户程序菜单,不剪切也行,查看setup的属性窗口,找到product



在msiexec.exe的快捷方式的属性窗口中Arguments添加上productCode 格式是/x+空格+productCode



六 生成setUp项目,打包结束,这也是个很基础的过程,还有很多细节部分大家就从别处查查资料吧,貌似微软的文档把这个说的很清楚,有时间再研究研究!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: