Installation API
Description
In order for us to meet our goal to be an "embedded" database, we
need to facilitate the installation process for those customers who deploy
InterBase. Currently we provide an Install Shield program which prompts the
user for information needed to install, and then performs the install
displaying the InterBase billboards. While this process is perfectly acceptable
for end users, it is unacceptable for someone trying to deploy InterBase with
their application, using their own install program.
The solution to this problem is to provide an install "engine"
which can be invoked programmatically by the developer. This same engine can
then be called by a GUI designed by us, to perform our own end user
installation. In this manner we will have only one install process satisfying
the needs of the end user as well as the developers deploying InterBase.
This engine would have to be in the form of a library (most likely a DLL)
which can be called by any windows program, and thus any install program the
developer might choose to use, including Install Shield. This implies that we
move away from using Install Shield, and completely re-write of our install
process. This is necessary since our current install is not very maintainable,
nor expandable, and does not satisfy the needs of our developer community.
User Interface/Usability
The Install API has ten entry points:
- isc_install_set_option
- isc_install_unset_option
- isc_install_clear_options
- isc_install_precheck
- isc_install_execute
- isc_uninstall_precheck
- isc_uninstall_execute
- isc_install_get_message
- isc_install_load_external_text
- isc_install_get_info
For convenience to the user, and maximum flexibility of the design, we will
define the following types:
- OPTIONS_HANDLE which is a void*
- TEXT which is char
- MSG_NO which is a long
- OPT which is an unsigned long
- FP_STATUS which is a function
pointer of type int (*fp_status)(int status, void *status_arg, const TEXT*
description)
- FP_ERROR which is a functions
pointer of type int (*fp_error)(MSG_NO msg_no, void *status_arg, const TEXT*
description) These functions have the following interfaces.
These functions have the following interfaces.
| MSG_NO
isc_install_set_option(OPTIONS_HANDLE* phandle, OPT option) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred, and less
than isc_install_success if the function completed with warnings. In the
case of a non isc_install_success result, The VAR may call the function
isc_install_get_message to obtain the error message. An
exhaustive list of the error codes and messages will be generated once the high
level design has been completed. Note: These will be available to
the user in the header file as well as in the documentation.
|
| phandle |
The address for the handle. The handle will need to be set to 0L
be the user before calling this function the first time. Once the
functions completes succesfully, it will point to an options list managed by
the install engine.
|
| option |
For the InterBase product, this can be any one of the
following values:
| INTERBASE |
Install all InterBase components, and their related
files. This is the same as specifying IB_SERVER,
IB_CLIENT, IB_CMD_TOOLS, IB_GUI_TOOLS,
IB_DOC, IB_EXAMPLES, and IB_DEV.
|
| IB_SERVER |
Install the Server component of InterBase. This
includes the server, the license file (if present), the message file, the
guardian, the server configuration tool, the database information tools
(GSTAT, and GDS_LOCK_PRINT/IBLOCKPR), the UDF
library, the international character set library, and the help files (Windows
only). Also make all necessary additions to the registry, including the
creation of the InterBase service on NT (Windows only). Modify the
services files to add 3050/tcp.
|
| IB_CLIENT |
Install the Client component of InterBase. This
includes the client library, the license file, the message file. Also
make all necessary additions to the registry (windows only). Modify the
services file to add 3050/tcp.
|
| IB_CMD_TOOLS |
Install all the command line tools for InterBase.
These are GBAK, GFIX, GDEF (when applicable),
GSEC, GSTAT, GDS_LOCK_PRINT (IBLOCKPR on
Windows), QLI (when applicable), and ISQL. This option
will issue a warning if the IB_CLIENT option has not been
specified. Note: This option has the same effect as specifying
IB_CMD_TOOLS_DB_MGMT, IB_CMD_TOOLS_USR_MGMT, and
IB_CMD_TOOLS_DB_QUERY.
|
| IB_CMD_TOOLS_DB_MGMT* |
Install the command line tools used for database
management. These are GBAK and GFIX. This option
will issue a warning if the IB_CLIENT option has not been specified.
|
| IB_CMD_TOOLS_USR_MGMT* |
Install the command line tools used for user
management. This is GSEC. This option will issue a warning
if the IB_CLIENT option has not been specified.
|
| IB_CMD_TOOLS_DB_QUERY* |
Install the command line tools used for database
query. These are ISQL, GDEF, and QLI when
applicable. This option will issue a warning if the IB_CLIENT
option has not been specified.
|
| IB_GUI_TOOLS |
Install all the GUI tools for InterBase, and their related
help files. These are currently only available on Windows and they are
Server Manager (IBMGR32) and WISQL. This option will
issue a warning if the IB_CLIENT option has not been specified.
Note: This option has the same effect as specifying IB_GUI_TOOLS_DB_QUERY,
and IB_GUI_TOOLS_DB_MGMT.
|
| IB_GUI_TOOLS_DB_QUERY* |
Install the GUI tools used for database query, and their
related help files. This is WISQL. This option will issue
a warning if the IB_CLIENT option has not been specified.
|
| IB_GUI_TOOLS_USR_MGMT* |
This is reserved for future use and is the same as
IB_GUI_TOOLS_DB_MGMT
|
| IB_GUI_TOOLS_DB_MGMT* |
Install the GUI tools used for database management, and
their related help files. This is Server Manager (IBMGR).
This option will issue a warning if the IB_CLIENT option has not been
specified.
|
| IB_DOC |
Install all of the InterBase documentation. This is
currently all of the PDF files and their indexes.
|
| IB_EXAMPLES |
Install all the InterBase examples. Note: This options
has the same effect as specifying IB_EXAMPLE_API and
IB_EXAMPLE_DB. This option will issue a warning if the
IB_SERVER, IB_CLIENT, and IB_DEV options have not been
specified.
|
| IB_EXAMPLE_API |
This installs all API, SQL, DSQL, and ESQL example files.
This option will issue a warning if the IB_CLIENT and the
IB_DEV options have not been specified.
|
| IB_EXAMPLE_DB |
This installs all example databases. This option will issue
a warning if the IB_SERVER option has not been specified.
|
| IB_DEV |
Install the development tools and files for InterBase.
These are GPRE, the import libraries, and the header files.
|
| IB_ODBC |
Install the ODBC driver and the ODBC 3.0 driver manager.
|
Option's marked with * are not available in the current install. They
are included for maximum flexibility, however it should be recognized that they
represent more work. If it is determined that this level of flexibility
in not needed, then they may be omitted.
Note 1: The install engine itself, will always be installed, whenever any
option is installed. Whereas the install engine import libraries, and header
files will be installed as part of the IB_DEVoption.
Note 2: These constants will be pre-defines in a C header file made
available to all who will use the API. The user will be free to translate
this header to any other language. It is possible that we may choose to
also provide a Delphi unit, this is yet to be determined.
Note 3: All the options begin with IB_ since they are subsets of
options for INTERBASE, in this way we could have options named
IC_ as subsets of options for INTERCLIENT. In the first
release of this product we will not include the IC_ options.
|
This function will evaluate the option specified and add all
necessary nodes to the linked list of options represented by
handle. Each node can represent a file being copied, or a
registry entry to be created.
This function will need to be called once for every option the user wishes
to add.
|
| MSG_NO isc_install_unset_option(OPTIONS_HANDLE* phandle,
OPT option) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred, and less
than isc_install_success if the function completed with warnings. In the
case of a non isc_install_success result, The developer may call the function
isc_install_get_message to obtain the error message. An
exhaustive list of the error codes and messages will be generated once the high
level design has been completed. Note: These will be available to
the user in the header file as well as in the documentation.
|
| phandle |
The address for the handle. The handle represents the list
of options requested using isc_install_set_option. If this is
set to zero an error message will be returned.
|
| option |
This can be any one of the values listed above in
isc_install_set_option. If option is the only member of the list
then handle will be set to zero to indicate an empty options list.
|
This function will access the options list pointed to by
handle and remove the option specified by option. This function
will need to be called once for every option the users wishes to remove. If the
option to be removed is the only option currently set then the call is
equivalent to isc_install_clear_options.
|
| MSG_NO
isc_install_clear_options(OPTIONS_HANDLE* phandle) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred, and less
than isc_install_success if the function completed with warnings. In the
case of a non isc_install_success result, the function
isc_install_get_message may be called to obtain the error
message. An exhaustive list of the error codes and messages will be
generated once the high level design has been completed. Note:
These will be available to the user in the header file as well as in the
documentation.
|
| phandle |
The address for the handle representing the list of options
requested using isc_install_set_option. If this is set to zero
an error message will be returned.
|
This function will clear all the options stored
in handle. This needs to be called anytime the options need to be
rebuilt, and may be called at the end of the install process. Upon
succesful completion handle is set to 0L.
|
| MSG_NO isc_install_precheck(OPTIONS_HANDLE handle,
TEXT *source_path, TEXT *dest_path) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred, and less
than isc_install_success if the function completed with warnings. In the
case of a non isc_install_success result, the function
isc_install_get_message may be called to obtain the error
message. An exhaustive list of the error codes and messages will be
generated once the high level design has been completed. Note:
These will be available to the user in the header file as well as in the
documentation.
|
| handle |
The handle to the list of options requested using
isc_install_set_option. If this is set to NULL an error message
will be returned.
|
| source_path |
The path where the files to be installed are located. In most cases this
will be a path on the CD-ROM, since this will most-likely be our source
media. If this is set to NULL then this check is skipped, otherwise the
existence and readability of this path is checked. This parameter is
needed so that the pre-check can verify that InterBase is actually located in
the source directory. The function will return n error if it could not read the
path attributes.
|
| dest_path |
The path to which we wish to install. If this is set to NULL then
the disk space check is skipped. This path is checked for existance, and
if it does not exist the rest of checks is skipped. If the path
does exist, then we will check it for writability.
|
This function will perform all the pre install checking
needed, such as:
- Not allow a SuperServer to be installed if a ClassicServer is present.
- The function will check source_path. The source_path will be
checked for existence, that is actually a directory and for readability. The
path shall be a valid directory path. To determine whether a particular path is
valid check your OS manauls. The check is omitted if source_path is NULL.
- The dest_path is checked whether it is a directory, if it is writeable
and whether it has enough space to install the selected components. The path
shall be a valid directory path. To determine whether a particular path is
valid check your OS manauls. The check is omitted if dest_path is NULL or it
does not exist.
- Check if the destination drive/volume has enough disk space to install
selected options.
- Check for pre-existing, newer or older, versions of the product already
running.
- Check the dependencies of the options required. For example,
generate a warning if the tools are being installed without the
client.
- Check for a valid operating system.
- Check for the correct user permissions needed to install. When installing
on NT the user needs an administrative priviliges.
Note: Handle should be a valid handle obtained by calling
isc_set_option. Handle cannot be NULL. If this is the case, an
error will be returned.
|
| MSG_NO isc_install_execute(OPTIONS_HANDLE
handle, TEXT *source_path, TEXT *dest_path, FP_STATUS *fp_status, void
*status_arg, FP_ERROR *fp_error, void *error_arg, TEXT
*uninst_file_name) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred, and less
than isc_install_success if the function completed with warnings. In the
case of a non isc_install_success result, the function isc_get_install_message
may be called to obtain the error message. An exhaustive list of
the error codes and messages will be generated once the high level design has
been completed. Note: These will be available to the user in the
header file as well as in the documentation.
|
| handle |
The handle of the options requested using
isc_install_set_option.
|
| source_path |
The path where the files to be installed are located. In most cases this
will be a path on the CD-ROM, since this will most-likely be our source
media. This may NOT be set to NULL.
|
| dest_path |
The path to which we wish to install. If dest_path does not
exists it will be created. This can not be NULL nor it can be an empty
string. If you wish to get a suggested destination use
isc_install_get_info
function.
|
| fp_status |
A call-back function which accepts an integer from 0 to 100 indicating %
completion. If this function is supplied by the user, it will be called as
progress is made within the engine to allow the user to display a status bar,
bill-boards, or what ever other form of progress they wish. This may be
NULL, in which case no status information will be supplied to the user. The
'func' type will be pre-defined in the header.
|
| status_arg |
User defined data to be passed to fp_status. This helps
the user establish the context of the function.
|
| fp_error |
A call-back function which accepts an error number. This function
will process the error (such as the file is in use) and return
isc_install_fp_retry for retry, isc_install_fp_continue for continue, and
isc_install_fp_abort for abort. If abort is specified, the function will
fail and the original error is returned. This allows the user to handle
errors and inform us of the action we need to take. This may be NULL, in
which case if an error occurs the function will fail and return the error.
|
| error_arg |
User defined data to be passed to fp_error. This helps
the user establish the context of the function.
|
| uninst_file_name |
A pointer to a buffer in which the name of the uninstall file will be
returned. This file name will be of the type ib_uninst.xxx where xxx is a
sequence number. This information is to be used to create the uninstall
icon. If this is set to NULL the file name will not be returned.
|
This function will perform the actual install,
that is:
- Call isc_install_precheck to ensure that the install may be
performed.
- Log all actions to a file called ib_install.log. This file is initially
created at the temporary directory and it is moved to the destination directory
upon successful completion.
- Create the destination directory if it does not already exist.
- Copy the files using all the correct version checks, and delayed copying
methods necessary.
- Increase the reference count of shared files.
- Create the registry entries needed.
- Install the guardian in the Services Manager on Win NT, or add the
guardian to the Run section of the registry on Win 95.
- Modify the TCP/IP services file (if necessary).
- Write the options installed into the uninstall file for later use.
- Return the name of the uninstall file.
Note: If any of the call-back functions attempt to call the Install API
functions, other then isc_install_get_message, the result will be
undetermined. Thus, these functions should not be calling back into the
Install Engine.
|
| MSG_NO isc_uninstall_precheck(TEXT
*uninstall_file_name) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred,
and less than isc_install_success if the function completed with
warnings. In the case of a non isc_install_success result, the
function isc_install_get_message may be called to obtain the error
message. An exhaustive list of the error codes and messages will be
generated once the high level design has been completed. Note:
These will be available to the user in the header file as well as in the
documentation.
|
| uninstall_file_name |
The name and path to the uninstall file. This will allow us to
determine if InterBase has been instlled, and which options were
installed. This may not be left NULL.
|
This function will perform all pre uninstall
checking needed, such as:
- Check that the uninstall file is valid.
- Check that the server is not running if the server was installed.
- Check for the correct user permission needed to uninstall.
|
| MSG_NO isc_uninstall_execute(TEXT *uninstall_file_name,
FP_STATUS *fp_status, void * status_arg, FP_ERROR *fp_error, void
*error_arg) |
| return |
The return value is isc_install_success if the function executed
successfully, larger than isc_install_success if an error occurred,
and less than isc_install_success if the function completed with
warnings. In the case of a non isc_install_success result, the
function isc_install_get_message may be called to obtain the error
message. An exhaustive list of the error codes and messages will be
generated once the high level design has been completed. Note:
These will be available to the user in the header file as well as in the
documentation.
|
| uninstall_file_name |
The name of the file containing the options which were installed.
This information will be used to decide what we will uninstall. This can not be
NULL
|
| fp_status |
A call-back function which accepts an integer from 0 to 100 indicating %
completion. If this function is supplied by the user, is will be called as
progress is made within the engine to allow the user to display a status bar,
bill-boards, or what ever other form of progress they wish. This may be
NULL, in which case no status information will be supplied to the user. The
'func' type will be pre-defined in the header.
|
| status_arg |
User dafined data to be passed to fp_status.
This helps the user establish the context of the function.
|
| fp_error |
A call-back function which accepts an error number. This function
will process the error (such as the file is in use) and return -1 for
retry, 0 for continue, and 1 for abort. If abort is specified, the
function will fail and the original error is returned. This allows the user to
handle errors and inform us of the action we need to take. This may be
NULL, in which case if an error occurs the fp_status is not called and the
function will return the error.
|
| error_arg |
User defined data to be passed to fp_error. This helps
the user establish the context of the function.
|
This function will perform the actual uninstall, that
is:
- Call isc_uninstall_precheck to ensure that the uninstall may be
performed.
- Remove all InterBase files that are installed. ODBC Core Files,
msvcrt.dll, setupapi.dll, cfgmgr32.dll, isc4.gdb, isc4.gbk and ib_license.dat
will not be removed.
- Remove registry entries.
- Decrease reference counts of shared files.
- Remove shared files which have a reference count less than 1 except for
those files which Microsoft has pre assigned to 0, such as MSVCRT.DLL.
- Uninstall the InterBase Guardian and InterBase Server services on NT.
Remove ibguradian.exe at Run registry key on 95/98 systems.
Note: If any of the call-back functions attempt to call the Install API
functions, other then isc_install_get_message, the result will be
undetermined. Thus, these functions should not be calling back into the
Install Engine.
|
| MSG_NO isc_install_get_message(MSG_NO msg_no, TEXT *msg,
int msg_len) |
| return |
The function actually returns MSG_NO which can be checked. It may return
error codes when something goes wrong. The best practice is to check the error
code to ensure that the message returned is credible.
|
| msg_no |
The error/warning value to be translated. This is the same value
that is returned from the functions above.
|
| msg |
A buffer in which to place the message.
|
| msg_len |
The length of the buffer sipplied in bytes. If the error/warning
message does not fit in the space provided, as much of the message that will
fit will be placed in msg.
|
This function converts the error/warning value
stored in msg_no and returns the corresponding error/warning message for use by
the programmer. The message returned will always be zero terminated.
|
| MSG_NO isc_install_get_info( info_type,
option, info_buf, buf_size); |
| return |
The function returns a MSG_NO which can be later used in
isc_install_get_message to obtain a human readable error information. When the
option parameter is used the option is validated. If the option specified
is invalid, info_type specified is not valid or the buffer pointer is not valid
the function will return an error . The caller should always check the return
value. The contents if the info buffer is undetermined when the function
returns something other than isc_install_success
|
| info_type |
This can be one of the constants defined at ibinstall.h The function
will return an error of the info_type specified is not known to the install
API.
|
| option |
The option we would like to receive information about. The function will
return an error when the option specified is not valid. The option value is
ignored when a destination suggestion is requested.
|
| info_buf |
A pointer to a buffer where the infomation requested will
be returned. The buffer can not not NULL. The function will return an error if
the buffer is NULL.
|
| buf_size |
This specifies a size of the buffer in bytes. The buffer length of
0 is unacceptable. It is the responsibility of the user to ensure that the
actual buffer size is passed to the function. It is also the responsibility of
the calller to ensure that the buffer is large enough to hold the requested
information. If text information is requested then the buffer is recommended to
be at least ISC_INSTALL_MAX_MESSAGE_LEN bytes. If the destination suggestion is
requested then the recommended buffer size should be ISC_INSTALL_MAX_PATH. For
diskspace information the result will be of unsigned long size.
|
The function will return the information requested by
info_type. If the info_type is not option specific then the option argument is
ignored. The information is returned at info_buf location. This parameter
can not be NULL. A proper buf_ size in bytes should be specified. If either
info_buf or buf_size are NULL(0) an error will be generated. Currently 4 types
of the information can be expected from the function but it is possible to add
additional ones as necessary. The types of information are:
- Suggested destination directory. This functionality is taken over from
isc_install_precheck (5.5 undocumented functionality). isc_install_precheck
will no longer suggest a destination path (Option parameter is ignored in this
case).
- Disk space required to install a particular option (Requires a valid
option)
- A human readable option name (Requires a valid option)
- A human readable option description. (Requires a valid option)
|
| MSG_NO isc_install_load_external_text(external_path) |
| return |
The function returns a MSG_NO which can be later used in
isc_install_get_message to obtain a human readable error information. When the
option parameter is used the option is validated. IF the file can not be loaded
a warning is returned. This is because this functionality is not essential for
the rest fo the install.
|
| external_path |
This is full path to where the .msg file can be found. Most of
the time this is the source_path form where the customer installs the product.
A developer may choose to place the file or several .msg files into a
separate sub directory and load it from there.
|
The function addresses the
internationalization issues. It attempts to load the external .msg file
from external_path location. Normally the developer would supply one .msg file.
It is, however, possible to write the setup program in such a way that it can
switch the languages on demand. In this case the developer should provide
several .msg files.
This essentially means that we are providing a feature that will enable
customers easily replace english language messages that our API issues with
their own messages in a different language. For this we provide an API call
isc_install_load_external_text to load a customer defined
text strings stored in a disk file.
The messages that we have to store in the .msg are
- error messages
- options names and options descriptions
- actions text. It will contain actions descriptions and actions status
messages that will be logged to a text ibinstall.log file.
This might possibly end up in 3 or more different sets of messages that we have
to handle. Since we know better how the messages file will look like we have to
supply s necessary tool to create such a file. The proposed scenario is:
- The proposed name for the tool is MAKEMSG.
- The customer using our tool extracts the set of predefined text messages
out to a text file that is readable and can be edited. The text file is created
in such a form that it could be fed back to our tool.
- The customer edits the file and runs our tool against it. The tool parses
the file and creates ibinstall.msg.
- It is the responsibility of the customer to copy the ibinstall.msg file to
a proper location during the installation process. This is if the customer
wants that the uninstall program use his messages file.
- It is also the responsibility of the customer to remove the file upon
uninstall.
- To make use of the customized ibinstall.msg file the customer has to call
isc_install_laod_external_file function.
It is possible to create several msg files. The setup program might ask the
user which language he prefers to receive the install messages and switch the
language momentarily. The program may switch the language as many times as it
wishes. The default english messages becomes unavailable as soon as the user
switches to another language unless the user also creates an external english
language msg file.
|
These ten entry points are necessary and sufficient to write an
application which will programmatically install and uninstall the InterBase
product. By the way of example, here is an example of algorithm which we
could use to make our end user install. The error handling is moderate and
should be more elaborate in a real program.
begin
OPTIONS_HANDLE
handle;
boolean
done=false;
LANG_TYPE
language; /*
Get user preference if
desired. This is if you created translated ibinstall.msg files
in different
directories
*/
language=get_language_choice();
if (language <>
english)
isc_install_load_external_text(lang_dirs[langauge]);
/* Query install for all the
possible option names */
while(not all options)
begin
isc_install_get_info(isc_install_info_opname, option, opname buffer,
ISC_INSTALL_MAX_MESSAGE_LEN);
isc_install_get_info(isc_install_info_opdescription, option, opdesc
buffer, ISC_INSTALL_MAX_MESSAGE_LEN);
isc_install_get_info(isc_install_info_opspace, option, opspace buffer,
sizeof(unsigned long));
end;
/* Get a suggested
destination directory */
isc_install_get_info(isc_install_info_destination, 0, dest_buffer,
ISC_INSTALL_MAX_PATH);
/* Present the user his choices and
interact with them */
interact_with_user();
/*
Use isc_install_set_option and
isc_install_unset_option either when interacting with the user
or after the user pushes Install
button. Zero the handle the very first time.
*/
handle=0L;
while (not all options)
begin
if(option is
selected)
isc_install_set_option(&handle, option); // Check for errors. Don't
be like me
end;
/* You can check with source_dir and
dest_dir. In this case no check is performed on
directories. Also not all
of the checks are performed on the dest_path if it does not exist
*/
error=isc_install_precheck(handle, source_path, dest_path)
if (error >
isc_install_success) then
begin
/* if a classic server is installed, or any server is running
* then give error and exit */
isc_install_get_message(error, message, length(message))
user_choice=display(message);
do_user_choice() /* I.e. terminate, return to options selection screen */
end
else
if
(error < isc_install_success) then
begin
/* Some warning has occured, display it and continue */
isc_install_get_message(error, message, length(message))
display(message)
end
display_file(install.txt)
display_file(license.txt)
/*
You can supply no callback
functions but it is not recommended because install will abort on any
error.
Some of the errors might
be ignored. Some problems might be fixed by hand after the install.
If you do not use
callbacks you will not be able to appraise the user of the status
*/
error=isc_install_execute(&handle, source_path, dest_path, NULL, NULL,
NULL, NULL, NULL)
if (error < 0) then
begin
isc_install_get_message(error, message, length(message))
display(message)
exit()
end
else
if
(error > 0) then
begin
isc_install_get_message(error, message, length(message))
display(message)
end
display_file(readme.txt)
/* This is mandatory. If you do not clear
options it will result in memory leaks */
isc_install_clear_options(&handle)
display_done()
end
Note: This algorithm does not display a status, not does it handle errors
during the install process. If an error occurs,
isc_install_execute would fail, and the install would not happen.
Requirements and Constraints
The first implementation of this feature will only be available on the
Wintel platform (Windows 95 and Windows NT 4.0.) Once this work is
complete we will use the same design to implement this feature for the UNIX
platforms. Furthermore, the install API will currently only be written to
install the InterBase Client/Server product, although products such as
InterClient/InterServer will be kept in mind as this feature is designed.
Whenever possible, the install will be written in such a way that little or no
modifications have to be made to the API to allow for the installation of other
InterBase products.
This install will NOT have any feature for cutting diskettes, instead it
will always assume that the source is uncompressed, placed on a CD or in a
temporary location on the hard drive. If our developers have a need to
make a diskette installation, then we can assume that they will have a disk
cutting system. In this case they can compress and cut up the InterBase
distributable, and their install program will be responsible for uncompressing
and reassembling our install image in a temporary location for us to use.
We will write our own GUI install program which will interact with the user
and call these API's. In this way we can minimize the number of install
programs in the field. This will be the installation program which we put
on our CD to allow our end users to install InterBase. At this time we
are not planning to provide the source to our install GUI as an example of how
to call the install API. Although Pubs is welcome to the source code to
use as code snippets for the documentation of the API.
It is the responsibility of the user of this API to program the following
aspects:
- Prompt the installer for any information needed at install time, such as
destination directory, and install options, or to provide these answers for the
API.
- Display progress information as the install is being performed as supplied
by the fp_status function.
- Provide prompts for processing errors as the install is being performed as
supplied by the fp_error function.
- Installation of the InterBase ODBC driver, if desired, as specified by the
Microsoft ODBC 3.0 SDK.
- Starting of the InterBase Guardian service, if desired, on Windows NT
using the Services Manager API.
- Launch the InterBase License Tool to create a license based on the
installers certificate ID and Key, or concatenate a valid license file to the
current one, if one exists.
There are several features which were available in the previous (<=5.1)
install, which will not be supported by this API in order to simplify the
install process, and to increase the DBA-lessness of our product. These
options are:
- Prompting the user to choose the server should run as an application or as
a service. In 6.0 the InterBase Guardian will be installed as a service
on Windows NT and as an application on Windows 95. The server and
guardian can still run as an application on Windows NT, but we will no longer
present this as an install option. We might choose to document how to run
the server as an application on Windows NT.
- Prompting the user to choose between starting the server manually or
automatically. In V6.0 the InterBase Guardian will start automatically
when windows starts. If the user wishes to have it start manually, he/she
may still use the services manager to make that modification, but we will no
longer present this as an install option. We might choose to document how
to start the server manually.
- Prompting the user to choose between having the InterBase Guardian start
the server every time it goes away, or only once. The Guardian can be
configured either way but by default it will always re-start the server.
We will no longer offer this as an install option. We already document
how to configure the Guardian.
- Prompting the user to choose to add the 3050/tcp entry to the services
file. We are the registered users of this port, thus we should not be
asking them to confirm this change. If TCP/IP is supported on the machine
we will automatically add this entry.
Migration Issues
This is a completely new feature. In the past a developer would have
used Install Shield to call or 'emulate' our install program. In order
for the developer to take advantage of this API they will need to modify their
install code. This is an acceptable change since there is a great request
for this feature and much discontent with the previous solution. Of course this
new feature must provide the same functionality as the current install.
For example, the ability to delay copying files if they are in use, to prompt
the user for any necessary input, and to be able to uninstall, amongst many
other features.
This feature will NOT support Windows NT 3.51, thus our products will no
longer install on this platform. In InterBase 5.0 we stated that we did
not certify on Windows NT 3.51, but that it did work, as of InterBase 6.0 we
will no longer be able to make this statement.
This feature represents a new application programming interface for
InterBase. The implication of this new API is that technical services
will have to support our customers attempting to use it and help them through
any potential problems.
The V6.0 changes will cause our install program to change. This includes
introduction of isc_install_get_info API call.
|