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

  • 相关阅读:
    IIS的各种身份验证详细测试
    HTTP Error 401.3 Unauthorized Error While creating IIS 7.0 web site on Windows 7
    C/S and B/S
    WCF ContractFilter mismatch at the EndpointDispatcher exception
    Configure WCF
    Inheritance VS Composition
    Unhandled Error in Silverlight Application, code 2103 when changing the namespace
    Java RMI VS TCP Socket
    Principles Of Object Oriented Design
    Socket处理发送和接收数据包,一个小实例:
  • 原文地址:https://www.cnblogs.com/ValiancyHe/p/2235855.html
Copyright © 2011-2022 走看看