zoukankan      html  css  js  c++  java
  • 如何用VS2008打包发布含Oracle数据库客户端的程序

        这些天来帮导师做一个用了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项目,打包结束,这也是个很基础的过程,还有很多细节部分大家就从别处查查资料吧,貌似微软的文档把这个说的很清楚,有时间再研究研究!

  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/ValiancyHe/p/2235855.html
Copyright © 2011-2022 走看看