.NET 安装包实现全过程 Oracle客户端 三方控件

 

                         安装包实现过程

 

完成功能:

1.       能够将开发的程序,Oracle客户端,.net Framwork,三方控件连续安装到目标机器上。

2.       Oracle客户端安装过程中可以自动的修改安装配置,包括注册表,环境变量的修改。其中环境变量实现的添加而非覆盖。

3.       .net Framwok 实现的是自动安装,即能够自己查找在目标机上是否已经安装了此产品。有则跳过,无则进行安装。

4.       三方控件实现了最优安装。减少了安装包的大小,缩短了安装时间。

 

 

 

实现步骤:

1   建立项目

打开VS2005,文件——新建——项目,在“新建项目窗口”选择“其他项目类型”下的“安装和部署”,然后在右侧的“模板”中选择“安装项目”。

2   实现功能

2.1  oracle免安装客户端的安装

2.1.1文件复制

    在“目标计算机的文件系统”添加文件夹,添加的顺序和Oracle客户端一样,名称也一样。如下图   

然后根据Oracle客户端的每个文件夹的内容,在我们的项目文件夹中也进行添加,添加方法为,右击文件夹,选择“添加”,选择“文件”,然后选择需要添加的文件,进行添加,添加后的文件会出现在右侧的框内。如下图

这样整个客户端的文件就可以复制到目标机器上。

存在问题,由于客户端里面的东西并不是全部都需要,因此有些即使不复制过去也行,但是担心会在运行时出现问题,所以我们将所有的文件都复制了过去。其中有几个文件会出现报错,因此我们没有复制,oraoledbzhs.dll,oraoledbus.dll.

2.1.2 修改注册表

     Oracle客户端中,有个文件是修改注册表用的。Oracle.reg

 右击setup1项目,选择“视图”,“注册表”,然后在左侧的“目标机器上的注册表”右击,“导入”,选择oracle,reg.就把注册表修改信息全部添加了进去。如下图

 

2.13 修改环境变量

修改环境变量也可以在修改注册表的时候修改,但是这样会直接覆盖掉目标机器上本来的环境变量,因此我们选用在目标机器的环境变量上添加值。

在解决方案setup1中新建一个类库,添加一个安装程序类。在安装程序类中写入代码如下;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Configuration.Install;

using Microsoft.Win32;

using System.Collections;

 

namespace ClassLibrary1

{

    [RunInstaller(true)]

    public partial class Installer1 : Installer

    {

        public Installer1()

        {

            InitializeComponent();

           

        }

        #region 重载自定义安装方法

        protected override void OnBeforeInstall(IDictionary savedState)

        {

            base.OnBeforeInstall(savedState);

        }

        public override void Install(IDictionary stateSaver)

        {

            base.Install(stateSaver);

            CheckOracleClient();

           

 

        }

        #endregion

 

        #region 检查Oracle客户端设置

        ///

        /// 检查Oracle客户端设置

        ///

        private void CheckOracleClient()

        {

            string[] keys = { "SYSTEM", "ControlSet001", "Control", "Session Manager", "Environment" };

            this.SetRegistryKey(Registry.LocalMachine, keys, "Path", @"C:/oracle/ora81/bin", true);

          

        }

 

        ///

        /// 将指定的值写入注册表

        ///

        /// <param name="startKey">初始的注册表项</param>

        /// <param name="registryKeys">注册表项数组,表示了指定值的路径</param>

        /// <param name="valueName">值的名称</param>

        /// <param name="value">要写入的值</param>

        /// <param name="append">是否在当前值前添加,若为否,则覆盖当前值</param>

        private void SetRegistryKey(RegistryKey startKey, string[] registryKeys, string valueName, string value, bool append)

        {

 

            RegistryKey rk = startKey;

            RegistryKey subKey = null;

            for (int i = 0; i < registryKeys.GetLength(0); i++)

            {

                subKey = rk.OpenSubKey(registryKeys[i], true);

                if (subKey == null)

                {

                    subKey = rk.CreateSubKey(registryKeys[i]);

                }

                rk = subKey;

            }

 

            if (append)

            {

                if (rk.GetValue(valueName) == null)

                {

                    rk.SetValue(valueName, value);

                }

                else

                {

                    string oldValue = rk.GetValue(valueName).ToString();

                    if (oldValue.IndexOf(value) >= 0)

                    {

 

                    }

                    else

                    {

                        rk.SetValue(valueName, value + ";" + oldValue);

                    }

                }

            }

            else

            {

                if (rk.GetValue(valueName) == null)

                {

                    rk.SetValue(valueName, value);

                    rk.Flush();

                }

            }

            if (subKey != null)

            {

                subKey.Close();

            }

            rk.Flush();

            rk.Close();

        }

        #endregion 检查Oracle客户端设置  

 

    }

    }

 

这段代码的功能就是将环境变量“添加“到目标机器上。

然后在项目setup1中右击,选择“添加“,”项目输出“,在类库项目下选择主输出。点击确定。

在文件系统中,应用程序文件夹下添加项目输出,选择主输出

在自定义操作中,右击安装节点,添加自定义操作,在“选择项目中的项“中,选择应用程序文件夹下的来自类库的主输出。如下图:

 

至此,安装oralce客户端完成。

2.2       安装.net Framework 2.0

右击项目setup1,点击属性,在系统必备上,选择创建用于安装系统必备组件的安装程序,选择.net Framwok 20,选择从与我的应用程序相同的位置下载系统必备组件。点击确定。如下图:

这样,当安装程序安装时候,会自动查看目标机器上是否安装了.net Framwok2.0 ,如果没有安装,它会自己进行安装。

2.3       安装我们的软件

在文件系统下,选择“应用程序文件夹”,右击添加文件,将项目中的DEBUG下的XXX.exe,添加进去。右击XXX.exe的快捷方式,剪切放置到用户桌面文件夹下和用户的程序菜单中。如下图所示:

  

这里注意可以修改快捷方式的名称和图标。

 

2.4       安装第三方控件程序集

这步只需要将程序和程序集放在同一目录下就可以了,就是把三方控件里面resource文件夹下的DLL文件和我们的软件EXE文件放在同一目录下。如下图

这样就可以实现最优安装。

 

 

总结。至此完成安装

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值