中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>数据库开发>开发应用>文章内容

delphi 在Wise制作的安装程序中嵌入Interbase安装(上)

来源:站内 关于:bill 发布时间:2007-06-22   [收藏] [推荐]
 构件下载:

http://www.algonet.se/~flysjo/interbase/files/ibwise.zip

  以下是一个例子演示如何在Wise中嵌入Interbase的安装,安装Interbase时使用到了IBINSTALL.DLL。

 

  工作原理

  ---------------------------------

  WISE InstallBuilder以及WISE Solutions公司出品的其它安装制作工具,可以在安装的过程中调用DLL文件。

  下面是一个调用IBWISE.DLL的例子,这个DLL是用Delphi写的(代码在后面),它读取WISE变量并将它们传送给IBINSTALL.DLL(由Interbase提供)。

  IBINSTALL.DLL来完成实际的Interbase的安装,而IBWISE.DLL则对安装过程进行封装,包括选项设置、错误处理和进度显示。

  IBWISE.DLL同样也将所有从IBINSTALL.DLL返回的状态消息传送给WISE。

  想得到更多关于WISE或Borland Interbase的信息,可以查看本文最后的“更多信息”部分。

  在WISE脚本中需要做的事情

  ------------------------------------------

  IBWISE.DLL需要WISE的变量,确保它们在IBWISE.DLL调用前已被WISE设置为正确值。

  在这些变量中,字符串变量IBINSTALLMODE(将被IBWISE.DLL读取并用于控制Interbase安装)可以设置为R和/或者S。

  R = 安装后启动(运行)Interbase服务器

  S = 安静安装方式(将不会有进度窗口)

  例如: 将变量 IBINSTALLMODE 设置为 RS

  (以安静方式安装Interbase,并在安装完成后启动Interbase服务器)

  IBOPTIONS (可选) 字符串类型, 设置此变量以控制Interbase的哪些部分需要安装

 

  [空] = 全部Interbase文件

  A = IB_SERVER

  B = IB_CLIENT

  C = IB_CMD_TOOLS

  D = IB_CMD_TOOLS_DB_MGMT

  E = IB_CMD_TOOLS_USR_MGMT

  F = IB_CMD_TOOLS_DB_QUERY

  G = IB_GUI_TOOLS

  H = IB_DOC

  I = IB_EXAMPLES

  J = IB_EXAMPLE_API

  K = IB_EXAMPLE_DB

  L = IB_DEV

  M = IB_REPLICATION

  N = IB_REPL_MANAGER

  O = IB_REPL_SERVER

  P = IB_CONNECTIVITY

  Q = IB_ODBC_CLIENT

  R = IB_JDBC

  S = IB_JDBC_CLIENT

  T = IB_JDBC_SERVER

  例如: 将变量 IBOPTIONS 设置为 AB

  (安装Interbase服务器和客户端文件)

  IBSRCDIR 字符串,Interbase源文件路径,通常是一个临时目录,WISE在安装过程中将文件解压到这个目录中。

  IBDESTDIR (可选项) 字符串,Interbase安装的目的路径,如果为空,则 Interbase将会安装到缺省目录中。

  输出变量 (由IBWISE.DLL使用并将结果返回给WISE )

  IBUIFILE 字符串,IBUNINST.EXE需要使用的卸载文件。

  IBSTATUS 字符串,如果安装不成功,则包含错误信息;如果安装过程没有错误发生,则包含"Success"。

  以下示例演示如果设置这些变量,解压Interbase源文件并安装。

  将以下编码复制到你的WISE脚本中。

  (不要忘记修改Interbase文件的源路径)

 

  item: Open/Close INSTALL.LOG

  Flags=00000001

  end

  item: Create Directory

  Pathname=%TEMP%\INTERBASE\

  end

  item: Install File

  Source=C:\install\InterBaseServer\*.*

  Destination=%TEMP%\INTERBASE\

  Flags=0000000110100010

  end

  item: Install File

  Source=C:\install\IBWISE\Ibwise.dll

  Destination=%TEMP%\INTERBASE\Ibwise.dll

  Flags=0000000010100010

  end

  item: Open/Close INSTALL.LOG

  end

  item: Set Variable

  Variable=IBINSTALLMODE

  Value=R

  end

  item: Set Variable

  Variable=IBOPTIONS

  Value=A

  end

  item: Set Variable

  Variable=IBSRCDIR

  Value=%TEMP%\INTERBASE\

  end

  item: Call DLL Function

  Pathname=%TEMP%\INTERBASE\IBWISE.DLL

  Function Name=InstallInterbase

  Variables Added=IBUIFILE,IBSTATUS

  Return Variable=0

  Flags=00000100

  end

  item: Open/Close INSTALL.LOG

  Flags=00000001

  end

  item: Delete File

  Pathname=%TEMP%\INTERBASE

  Flags=00000100

  end

  item: Open/Close INSTALL.LOG

  end

  --------------------------------------------------------------------------------

  IBWISE.DLL的源代码(Delphi)

  以下编码是Borland Delphi编写,编译生成IBWISE.DLL。

  这里是全部源程序

 

  IBWISE.DPR

  library IBWISE;

 

  uses

  SysUtils,

  Classes,

  IBWiseUnit in 'IBWiseUnit.pas',

  StatusFormUnit in 'StatusFormUnit.pas' {StatusForm};

 

  exports

  InstallInterbase,

  GetIBInstallDir;

 

  {$R *.RES}

 

  begin

  end.

  IBWiseUnit.pas

  unit IBWiseUnit;

  //——————————————————————————————————————————————————

  // WISE InstallIBServer version 1.1 by Magnus Flysj?

  // flysjo@algonet.se

  // Copyright 2001, Magnus Flysj?

  //——————————————————————————————————————————————————

 

  interface

 

  uses WinTypes, WinProcs, SysUtils, WinSvc;

 

  //—[Wise]——————————————————————————————————————————————

 

  Type

  ParamRec = record

  wStructLen: DWORD; { The length of the structure }

  hMainWnd: HWND; { Handle to main window }

  wMaxReplaces: DWORD; { Maximum number of replaces }

  wRepNameWidth: DWORD; { The width of a replace name }

  wRepStrWidth: DWORD; { The width of each replace string }

  wCurrReps: DWORD; { Current number of replace strings }

  szRepName: PChar; { The actual replace names }

  szRepStr: PChar; { The actual replace values }

  wRunMode: DWORD; { The installation mode }

  fLogFile: DWORD; { A file handle to the log file }

  szParam: PChar; { String parameter from Wise Installation System }

  end;

 

  //—[Interbase]—————————————————————————————————————

 

  OPTIONS_HANDLE = Integer;

  POPTIONS_HANDLE = ^OPTIONS_HANDLE;

  MSG_NO = Longint;

  OPT = Longint;

  TEXT = PChar;

  FP_ERROR = function(msg: MSG_NO; data: Pointer; error_msg: TEXT): Integer; stdcall;

  FP_STATUS = function(status: integer; data: Pointer; const status_msg: TEXT): Integer; stdcall;

  TIsc_install_clear_options = function (pHandle: POPTIONS_HANDLE):MSG_NO; stdcall;

  TIsc_install_execute = function (Handle: OPTIONS_HANDLE; src_dir, dest_dir: TEXT;status_func:FP_STATUS;

  status_data: Pointer;error_func: FP_ERROR; error_data: Pointer;uninstal_file_name: TEXT):MSG_NO; stdcall;

  TIsc_install_get_info = function (info_type :integer; option :OPT; info_buffer : Pointer;buf_len : Cardinal):

  MSG_NO; stdcall;

  TIsc_install_get_message = function (Handle: OPTIONS_HANDLE; message_no: MSG_NO;message_txt: Pointer;

  message_len: Cardinal):MSG_NO; stdcall;

  TIsc_install_load_external_text = function (msg_file_name: TEXT):MSG_NO; stdcall;

  TIsc_install_precheck = function (Handle: OPTIONS_HANDLE; src_dir, dest_dir: TEXT): MSG_NO; stdcall;

  TIsc_install_set_option = function (pHandle: POPTIONS_HANDLE; option: OPT): MSG_NO; stdcall;

  TIsc_uninstall_execute = function (uninstall_file_name: TEXT; status_func: FP_STATUS;status_data: pointer;

  error_func: FP_ERROR; error_data: pointer): MSG_NO; stdcall;

  TIsc_uninstall_precheck = function (uninstall_file_name: TEXT):MSG_NO; stdcall;

  TIsc_install_unset_option = function (pHandle: POPTIONS_HANDLE; option: OPT):MSG_NO; stdcall;

 

  const

  IB_INSTALL_DLL = 'ibinstall.dll';

  { These are the values the FP_ERROR routine can return. }

  isc_install_fp_retry = -1;

  isc_install_fp_continue = 0;

  isc_install_fp_abort = 1;

  { isc_install_get_info info_types }

  isc_install_info_destination = 1;

  isc_install_info_opspace = 2;

  isc_install_info_opname = 3;

  isc_install_info_opdescription = 4;

  ISC_INSTALL_MAX_MESSAGE_LEN = 300;

  ISC_INSTALL_MAX_MESSAGES = 200;

  ISC_INSTALL_MAX_PATH = MAX_PATH;

  { Basic Components used to install InterBase }

  INTERBASE = 1000;

  IB_SERVER = 1001;

  IB_CLIENT = 1002;

  IB_CMD_TOOLS = 1003;

  IB_CMD_TOOLS_DB_MGMT = 1004;

  IB_CMD_TOOLS_USR_MGMT = 1005;

  IB_CMD_TOOLS_DB_QUERY = 1006;

  IB_GUI_TOOLS = 1007;

  IB_DOC = 1011;

  IB_EXAMPLES = 1012;

  IB_EXAMPLE_API = 1013;

  IB_EXAMPLE_DB = 1014;

  IB_DEV = 1015;

  IB_REPLICATION = 1016;

  IB_REPL_MANAGER = 1017;

  IB_REPL_SERVER = 1018;

  IB_CONNECTIVITY = 1101;

  IB_ODBC_CLIENT = 1102;

  IB_JDBC = 1110;

  IB_JDBC_CLIENT = 1103;

  IB_JDBC_SERVER = 1105;

  { Error and warning codes }

  isc_install_optlist_empty = -1;

  isc_install_actlist_empty = -2;

  isc_install_fp_copy_delayed = -3;

  isc_install_fp_delete_delayed = -4;

  isc_install_option_not_found = -5;

  isc_install_msg_version = -6;

  isc_install_cant_load_msg = -7;

  isc_install_invalid_msg = -8;

  isc_install_invalid_tbl = -9;

  isc_install_cant_create_msg = -10;

  isc_install_handle_not_allocated = -11;

  isc_install_odbc_comp_notfound = -12;

  isc_install_cant_delete = -13;

  isc_install_cant_rmdir = -14;

  isc_install_key_nonempty = -15;

  isc_install_success = 0;

  { File and directory related errors }

  isc_install_path_not_valid = 1;

  isc_install_path_not_exists = 2;

  isc_install_cant_write = 3;

  isc_install_type_unknown = 4;

  isc_install_cant_move_file = 5;

  isc_install_device_not_valid = 6;

  isc_install_data_truncated = 7;

  isc_install_cant_get_temp = 8;

  isc_install_no_file = 9;

  isc_install_cant_load_lib = 10;

  isc_install_cant_lookup_lib = 11;

  isc_install_file_exists = 12;

  isc_install_cant_open_log = 13;

  isc_install_write_error = 14;

  isc_install_read_error = 15;

  isc_install_invalid_log = 16;

  isc_install_cant_read = 17;

  isc_install_no_diskspace = 18;

  isc_install_cant_create_dir = 19;

  isc_install_msg_syntax = 20;

  isc_install_fp_delete_error = 21;

  isc_install_fp_rename_error = 22;

  isc_install_fp_copy_error = 23;

  { Precheck related errors }

  isc_install_system_not_supported = 24;

  isc_install_server_running = 25;

  isc_install_classic_found = 26;

  isc_install_no_privileges = 27;

  isc_install_cant_get_free_space = 28;

  isc_install_guardian_running = 29;

  isc_install_invalid_option = 30;

  isc_install_invalid_handle = 31;

  isc_install_message_not_found = 32;

  { TCP/IP services related }

  isc_install_no_stack = 33;

  isc_install_cant_add_service = 34;

  isc_install_invalid_port = 35;

  isc_install_invalid_service = 36;

  isc_install_no_proto = 37;

  isc_install_no_services_entry = 38;

  isc_install_sock_error = 39;

  isc_install_conversion_error = 40;

  { Operations errors }

  isc_install_cant_copy = 41;

  isc_install_no_mem = 42;

  isc_install_queue_failed = 43;

  isc_install_invalid_param = 44;

  isc_install_fp_error_exception = 45;

  isc_install_fp_status_exception = 46;

  isc_install_user_aborted = 47;

  { Registry related errors }

  isc_install_key_exists = 48;

  isc_install_cant_create_key = 49;

  isc_install_cant_set_value = 50;

  isc_install_cant_open_key = 51;

  isc_install_cant_delete_key = 52;

  isc_install_cant_query_key = 53;

  isc_install_cant_delete_value = 54;

  { OS services related errors }

  isc_install_service_existed = 55;

  isc_install_cant_create_service = 56;

  isc_install_cant_open_service = 57;

  isc_install_cant_query_service = 58;

  isc_install_service_running = 59;

  isc_install_cant_delete_service = 60;

  isc_install_cant_open_manager = 61;

  isc_install_system_error = 62;

  isc_install_com_regfail = 63;

  isc_install_dcom_required = 64;

  { ODBC installation errors }

  isc_install_odbc_general = 65;

  isc_install_core_version = 66;

  isc_install_drv_version = 67;

  isc_install_tran_version = 68;

 

  //———————————————————————————————————————————————————————

 

  type

  TIBWiseInstall = class;

 

  TIBInstallOption = ( opINTERBASE, opIB_SERVER, opIB_CLIENT, opIB_CMD_TOOLS,

  opIB_CMD_TOOLS_DB_MGMT, opIB_CMD_TOOLS_USR_MGMT,

  opIB_CMD_TOOLS_DB_QUERY, opIB_GUI_TOOLS, opIB_DOC,

  opIB_EXAMPLES, opIB_EXAMPLE_API, opIB_EXAMPLE_DB,

  opIB_DEV, opIB_REPLICATION, opIB_REPL_MANAGER,

  opIB_REPL_SERVER, opIB_CONNECTIVITY, opIB_ODBC_CLIENT,

  opIB_JDBC, opIB_JDBC_CLIENT, opIB_JDBC_SERVER );

 

  TIBInstallOptions = set of TIBInstallOption;

  TIBInstallError = function(Handle : HWND; Caller : TIBWiseInstall; Msg: Longint;Error_msg: string; var Handled : boolean) : integer;

  TIBInstallStatus = procedure(Handle : HWND; Caller : TIBWiseInstall;Status : integer; const Status_msg : string);

 

  TIBWiseInstall = class(TObject)

  constructor Create;

  destructor Destroy; override;

  private

  FDLLInst : HInst;

  Isc_install_clear_options : TIsc_install_clear_options;

  Isc_install_execute : TIsc_install_execute;

  Isc_install_get_info : TIsc_install_get_info;

  Isc_install_get_message : TIsc_install_get_message;

  Isc_install_load_external_text : TIsc_install_load_external_text;

  Isc_install_precheck : TIsc_install_precheck;

  Isc_install_set_option : TIsc_install_set_option;

  Isc_uninstall_execute : TIsc_uninstall_execute;

  Isc_uninstall_precheck : TIsc_uninstall_precheck;

  Isc_install_unset_option : TIsc_install_unset_option;

  FDestDirectory : string;

  FSourceDirectory : string;

  FIBHandle : POPTIONS_HANDLE;

  FHWND : HWND;

  FIBInstallOptions : TIBInstallOptions;

  FIBInstallError : TIBInstallError;

  FIBInstallStatus : TIBInstallStatus;

  FLastError : MSG_NO;

  FStartAfterInstall : boolean;

  FUninstallFile : string;

  FSilent : boolean;

  procedure SetOptions;


[浏览: 次]   
上一篇:delphi SQLSERVER添加二进制数据   下一篇:delphi 在Wise制作的安装程序中嵌入Interbase安装(下)
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi Delphi_三谈多态——善用virtua
·delphi 条形码处理
·delphi Delphi_三层开发基本概念介绍
·delphi 汉字转拼音码(上)
·delphi Olevariant
·delphi CS构架下的客户端自动更新程序
·delphi 在Dephi中使用TStream读写数据
·delphi delphi处理流
·delphi 汉字转拼音码(下)
·delphi 关于使用COM对象的方法
·delphi MTS组件——从理论到实践
·delphi 汉字转拼音码(中3)
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932