Remote 20Management 20Lessons 20Learned by PoOwbFh

VIEWS: 179 PAGES: 111

									Remote Management Component of AIS/W2K Pilot Project
       Technical Overview and Lessons Learned




                    Michael Johnson
            Middleware Services – Virginia Tech
                         2/11/02
                                                   Table of Contents
Introduction ....................................................................................................................... 4
Functional Overview of SMS ........................................................................................... 5
  Inventory and Resource Management ............................................................................ 5
  Diagnosis and Troubleshooting ...................................................................................... 5
  Package Distribution ....................................................................................................... 5
  Application Management ................................................................................................ 6
Installing SQL Server ....................................................................................................... 7
  Procedure for installing SQL Server ............................................................................... 7
Installing SMS Site Server ............................................................................................... 9
  Procedure for Installing SMS Site Server ....................................................................... 9
  Changes to SMS Site Server....................................................................................... 10
     New Shares ............................................................................................................... 10
Adding Clients to the SMS Site...................................................................................... 11
  Defining the SMS Site Boundary ................................................................................. 11
  Discovering Network Resources................................................................................... 12
  Client Installation in the AIS/W2K Pilot Project .......................................................... 15
Package Distribution ...................................................................................................... 17
Defining Collections ........................................................................................................ 31
Limitations of Package Distribution in SMS ................................................................ 37
Hardware and Software Inventory ............................................................................... 38
Remote Desktop Control ................................................................................................ 42
Packages ........................................................................................................................... 45
  Internet Explorer 6 ........................................................................................................ 45
  Netscape 6.1 .................................................................................................................. 45
  Banner 5.x ..................................................................................................................... 45
  Windows 2000 Service Pack 2 ..................................................................................... 45
  Black Ice Agent and Norton AntiVirus Corporate Edition ........................................... 46
  Office XP ...................................................................................................................... 46
  Eudora ........................................................................................................................... 46
Final Critique of SMS ..................................................................................................... 47
  Pricing ........................................................................................................................... 47
Appendix A ...................................................................................................................... 48
Appendix B ...................................................................................................................... 49
Appendix C ...................................................................................................................... 52
Appendix D .................................................................................................................... 109




                                                                                                                                      2
                                                 Table of Figures

Figure 1: Defining the SMS Site Boundary ...................................................................... 11
Figure 2: Configurable Discovery Methods ..................................................................... 12
Figure 3: User Account Discovery ................................................................................... 13
Figure 4: Network Discovery............................................................................................ 14
Figure 5: Windows Networking Logon Discovery ........................................................... 15
Figure 6: SMS Client Agents ............................................................................................ 17
Figure 7: General Properties for Agent ............................................................................. 18
Figure 8: Notification Properties for Agent ...................................................................... 19
Figure 9: Packages Container ........................................................................................... 20
Figure 10: General Tab for Packages................................................................................ 21
Figure 11: Data Source for Packages ................................................................................ 22
Figure 12: Distribution Points........................................................................................... 23
Figure 13: General Properties for Program ....................................................................... 24
Figure 14: Requirements Properties for Program ............................................................. 25
Figure 15: Environment Properties for Program .............................................................. 26
Figure 16: Advanced Properties for Program ................................................................... 27
Figure 17: Advertisements ................................................................................................ 28
Figure 18: General Properties for Advertisement ............................................................. 29
Figure 19: Schedule Properties of Advertisements ........................................................... 30
Figure 20: Collections ....................................................................................................... 31
Figure 21: Membership Rules of Collection ..................................................................... 32
Figure 22: Query Rules Properties .................................................................................... 33
Figure 23: Query Properties .............................................................................................. 34
Figure 24: Criterion Properties ......................................................................................... 35
Figure 25: Some Attributes that can be Queried ............................................................... 36
Figure 26: Hardware Inventory ......................................................................................... 38
Figure 27: Memory Inventory........................................................................................... 39
Figure 28: Software Inventory .......................................................................................... 40
Figure 29: Software Inventory of Microsoft Products ...................................................... 41
Figure 30: Configuration Options for Radmin.................................................................. 42
Figure 31: Passwords for Radmin ..................................................................................... 43
Figure 32: NT/2000 User and Groups for Radmin ........................................................... 43
Figure 33: Options for Radmin Service ............................................................................ 44




                                                                                                                               3
Introduction

          The goal of the Remote Management component of the AIS/W2K Pilot Project was to explore
technologies that reduce the Total Cost of Ownership (TCO) for desktop systems by reducing the number
of “house calls” required of IT staff to address common troubleshooting tasks. Such tasks include
installing and patching software, monitoring hardware changes, and complex troubleshooting tasks which
are difficult to complete over the phone. Systems Management Server (SMS) from Microsoft was
identified early on as a possible solution because it was believed that a Microsoft product would
interoperate well with Microsoft operating systems. Also, SMS had a favorable reputation and relatively
deep knowledge base within the industry. Microsoft provided Virginia Tech with software and technical
books to assist the AIS/W2K Pilot Technical Team with testing SMS. An SMS test site was established,
desktop systems were added to the site, and various SMS technologies were implemented in the test
environment. This paper will explore the technical decisions made in implementing the SMS site and the
lessons learned during the testing process.




                                                                                                          4
Functional Overview of SMS

           According to the Microsoft Systems Management Server 2.0 Administrator’s Companion:

                   SMS 2.0 offers remote desktop administration if four primary areas:
                       Inventory and resource management The ability to gather and maintain a
                          workstation’s hardware and software configuration in a central database that is
                          easy to access and interpret.
                       Diagnosis and troubleshooting The tools to effectively analyze hardware and
                          software concerns on remote workstations.
                       Package Distribution The ability to install applications and updates and
                          execute programs on a remote workstation.
                       Application management The ability to track, restrict, and license application
                          usage on a user’s workstation as well as to monitor product compliance issues. 1

Much of this functionality is implemented by installing software agents on managed workstations. In most
cases, an agent is deployed to clients only if the corresponding technology within SMS is activated by the
SMS administrator. Most of the communication between agents and the SMS site server is done by passing
files from the client system to shares automatically created by the SMS installation on the SMS Site Server.

Inventory and Resource Management
          SMS has a variety of methods for discovering resources attached to the network. These resources
include any IP-addressable hardware attached to the network (workstations, servers, routers, etc.) as well as
Windows NT/2000 domain users and global groups defined on NT/2000 domain controllers. Not all
discovered resources are manageable by SMS. For example, routers cannot be managed by SMS, but some
of their basic properties can be collect and displayed, such as IP address.
          In addition to discovering network resources, SMS can collect hardware and software data from
SMS clients. The Hardware Inventory Agent and the Software Inventory Agent collect hardware and
software information at SMS Administrator defined intervals. The information is stored in a Microsoft
SQL Server database and displayed in the SMS Administrators Console.

Diagnosis and Troubleshooting
         The Remote Tools Client Agent enables the SMS Administrator to gain keyboard and mouse
control of an SMS client while seeing a real-time image of the client’s desktop. The administrator can chat
with the user, execute programs on the client, transfer files to and from the client, and restart the client.

Package Distribution
          Within SMS, a package contains the files and/or instructions to be delivered to clients. The SMS
administrator defines the following attributes for packages: location of source files (note: an SMS package
does need to contain any files), where clients can retrieve the package (known as the Distribution Point),
and programs (set of instructions) that are run for the package. Clients are made aware of the existence of
packages by means of advertisements. Advertisements are applied to collection of SMS clients.
Collections can be defined by database queries based on client attributes (example: All Computers with
Windows 2000 Professional Service Pack 2) or defined by static membership.
          Since packages may or may not contain source files, Package Distribution does much more that
just software installation. Instructions to perform system maintenance tasks, such as virus scans or disk
defragging, can be the contents of a package. Such a package can be advertised to a set of clients to be run
nightly.
          SMS also provides great flexibility in how advertisements are sent to clients. Mandatory
advertisements are executed without user intervention, sometimes without the user even being aware that
an advertisement was run. Advertisements can be run in a domain administrator’s context, thus side-step
many access issues for the client.


1
    SMS 2.0 Administrator’s Companion, p. 5.


                                                                                                             5
Application Management
         In theory, SMS has two main functions for application management: application usage tracking
and application licensing. However, this author has never seen either work. Furthermore, anecdotal
evidence provided by a Microsoft consultant discourages use of this feature.




                                                                                                        6
Installing SQL Server

          SMS requires an installation of Microsoft SQL Server to store its database for client hardware and
software inventory. For the purposes of the pilot, Microsoft SQL Server 2000 was installed on a server
named Dumont running Windows 2000 Server. Dumont was a member server of the test-lab.w2k-
pilot.vt.edu domain. Since the Test-lab domain account SMSService will be the SMS administrator,
special privileges to Dumont were given to that account, as described below.

Procedure for installing SQL Server:

#Installation of SQL Server 2000 on Dumont.test-lab.w2k-pilot.vt.edu
#10.10.01
#OS: Windows 2000 SP2

Logon as TEST-LAB\SMSService (an account in Domain Administrators group)
Downloading SQLServer 2000 SP1 from microsoft.com

Loading SQLServer 2000 Standard Edition Disk 1

Install Components -> Install Database Server

Computer Name = Local Computer

"Create a new instance of SQL Server, or install Client Tools"

Installing "Server and Client Tools"

Instance Name = Default

Setup Type = Typical
Destination Folder:
         Program Files = D:\Program Files\Microsoft SQL Server
         Data File = E:\MSSQL\DB

**Granted test-lab\SMSService Logon as a Service right**

Services Accounts:
         Use the same account for each service. Auto start SQL Server Service
         Use a Domain User account: SMSService

Authentication Mode = Windows Authentication Mode

Licensing -> Per Seat with 10 licenses

Installation Complete.... Didn't prompt for restart... Rebooting anyway.

** After Reboot **

Installing SQLServer 2000 Service Pack 1

Didn't prompt me to restart.... Doing so anyway.

** After Reboot **

In SQL Server Enterprise manager:



                                                                                                           7
Creating new Database

Name = SMS_AIS
Database Files: E:\MSSQL\DB\MSSQL\data\SMS_AIS_Data.MDF
Log Files: E:\MSSQL\DB\MSSQL\data\SMS_AIS_Log.MDF
KEPT DEFAULTS

Name = SMS_AIS_LicDB
KEPT DEFAULTS

User Rights in Local Security Settings automatically granted to SMSService:
Act as part of the operating system
Bypass traverse checking
Increase quotas
Logon as a batch job
Replace a process level token




                                                                              8
Installing SMS Site Server
         It is possible to divide up the roles that a server can perform in SMS between multiple machines.
For example, there can be multiple Client Access Points, multiple Distribution Points, etc. For SMS sites
that have a complicated LAN topology or a large number of clients, dividing up these roles between several
servers may boost performance. For the purposes of this pilot, all SMS server roles are kept by one
machine, Yori. Like the SQL Server, this machine is a member server of the test-lab.w2k-pilot.vt.edu
domain.

Procedure for Installing SMS Site Server

NOTE: It was required to use the SMS 2.0 SP2 CD because the SMS 2.0 CD would not install on
Windows 2000 Server running terminal services.

#Installing SMS 2.0 in Yori
#10.10.01
#OS: Windows 2000 Server SP2
#IP Address: 198.82.162.46

Logging on as TEST-LAB\SMSService (member of domain administrators group)
Granting TEST-LAB\SMSService logon as a service right

Loading SMS 2.0 with SP2 CD

Choose Setup SMS 2.0

"Install an SMS primary site."

"Custom Setup"

Site code: AIS
Site name: Virginia Tech
Site domain: TEST-LAB

SMS Service account: TEST-LAB\SMSService

Number of SMS clients = 100

Installing everything except NetWare Bindery Support and NetWare NDS Support

Installation directory = E:\SMS

"No, do not install a dedicated local copy of SQL Server for SMS"

SQL Server Information for SMS Site Database
Computer running SQL Server = DUMONT
SQL Server 2000 or above
Use integrated security when accessing SQL Server.

Database name = SMS_AIS

SQL Server Information for Software Metering Database
Computer running SQL Server = DUMONT
Use integrated security
Database name = SMS_AIS_LicDB



                                                                                                        9
Number of SMS Administrator consoles = 10
Min number of SQL Server connections = 100
Check -> Automatically configures SQL Server to support at least the number of specified connections.

Placed SMS Provider on SMS site server

Installation successful

Did not prompt to restart, doing so anyway....

** After Reboot **

Installing SMS 2.0 SP3

"Upgrading an existing SMS Installation"

Did not prompt for restart.


Changes to SMS Site Server
          Many changes are made to the SMS Site server during SMS installation, including new shares,
new users, and new global groups. Furthermore, certain privileges must be set for the SMSService account
for the site server to function correctly.

New Shares
         For all share created by the SMS server installation, the Everyone group is given full control over
the share. NTFS permissions are applied to the folder behind the share to restrict access.

Share name            Resource                        Remark
-------------------------------------------------------------------------------
SMSPKGE$              E:\SMSPKGE$                     SMS Site AIS DP 10/12/01
                                 NTFS: YORI\Administrators = Full Control
                                           YORI\Guests = Read and Execute, List Folder Contents, Read
                                           YORI\Users = Read and Execute, List Folder Contents, Read
CAP_AIS               E:\CAP_AIS                      SMS Site AIS CAP 10/10/2001
                                 NTFS: YORI\Administrators = Full Control
                                           YORI\Guests = Read and Execute, List Folder Contents, Read
                                           YORI\Users = Read and Execute, List Folder Contents, Read
CInfo                 E:\SMS\CInfo
                                 NTFS: YORI\Administrators = Full Control
                                           TEST-LAB\SMSServer_AIS = Read and Execute, List Folder
                                                      Contents, Read
SMS_AIS               E:\SMS                       SMS Site AIS 10/10/01
                                 NTFS: YORI\Administrators = Full Control
                                           TEST-LAB\SMSServer_AIS = Read and Execute, List Folder
                                                      Contents, Read
SMS_SITE              E:\SMS\inboxes\despoolr.box\receive                   SMS Site AIS 10/10/01
                                 NTFS: YORI\Administrators = Full Control
                                           TEST-LAB\SMSServer_AIS = Read and Execute, List Folder
                                                      Contents, Read




                                                                                                          10
Adding Clients to the SMS Site
Defining the SMS Site Boundary

         The boundary for an SMS site is defined by IP subnets. Network resources outside of this
boundary cannot become SMS clients. A perspective client’s subnet mask is applied to the client’s IP
address to calculate its subnet, not the SMS site server’s subnet mask. Figure 1 shows the panel in the SMS
Administrators Console that is used to define the IP subnets that constitute the site boundaries.




                               Figure 1: Defining the SMS Site Boundary




                                                                                                        11
Discovering Network Resources

         Network resources must be discovered by the SMS site server before they can become clients.
There are five configurable discovery methods, as shown in Figure 2.




                              Figure 2: Configurable Discovery Methods




                                                                                                       12
          Windows NT User Account Discovery and Windows NT User Group Discovery work in
essentially the same way. Both query a list of NT/W2K domains for lists of all users or global groups.
Figure 3 shows how the SMS administrator configures this discovery method in the SMS Administrators
Console.




                                  Figure 3: User Account Discovery
Once accounts and groups have been discovered, they can be used to define collections. Thus, packages
can be advertised to individuals or groups.




                                                                                                         13
          Network Discovery, which is shown in Figure 4, is meant to provide an extremely flexible
method for discovering any IP addressable resource. Methods for discovering resources include searching
in specific NT domains, SNMP broadcasts, and monitoring DHCP servers. However, this discovery
method was determined to be unreliable, and its results were unpredictable. Many resources that should
have been discovered by Network Discovery never were.




                                        Figure 4: Network Discovery

          Heartbeat Discovery is enabled by default within an SMS site. At an SMS administrator defined
interval, Heartbeat Discovery probes SMS clients and asks for updated client information. This ensures
that SMS records do not become stale and are not accidentally purged from the site server.

          Windows Networking Logon Discovery is by far the easiest discovery method to implement, but
it violates the Rules of Engagement (ROE) for domain controllers in Virginia Tech’s Windows 2000 forest
of domains. In Windows Networking Logon Discovery, the SMS administrator defines a list of NT/2000
domains. A logon script can be automatically attached to every user account in those domains. When a
user logs onto the domain, the logon script checks to see if the user’s workstation is already an SMS client;
if the workstations isn’t a client, the logon script initializes the client installation process. The logon script
connects to a share on the domain controllers to retrieve the client installation program. This share is
automatically created on every domain controller in the domains that the SMS administrator lists for this
discovery method. That is in violation of the ROE which prohibits shares on domain controllers, other than
those necessary for Active Directory replication.




                                                                                                               14
          Manual Discovery occurs when someone on a workstation runs the SMSMan.exe program.
Sounds simple, but if the workstation is on a subnet that isn’t listed in the site’s boundary, then the
installation will appear to be successful, but will actually fail. Also, the SMSMan.exe program is
dependent on locating a “logon point”, i.e., a domain controller configured for Windows Networking
Logon Discovery.

Client Installation in the AIS/W2K Pilot Project

          Client installation is a surprisingly difficult problem to solve. Windows Networking Logon
Discovery is inappropriate because it violates the ROE. Network Discovery is too unpredictable and
unreliable. Heartbeat Discovery cannot be used to install new clients. Windows NT User and Group
Account Discovery can successfully identify user accounts and global groups, but can’t be used to install
the agents required for software distribution or hardware and software inventory on workstations. Manual
Discovery requires a logon point, which violates the ROE.
          This author developed a workaround to these problems that combines elements of Manual
Installation and Windows Networking Logon Discovery. The Manual Installation program, SMSMan.exe,
prompts the user to enter the name of a logon point. On the logon point, SMSMan.exe expects to find a
share named SMSLOGON, the share that is automatically created on domain controllers by Windows
Networking Logon Discovery. By replicating the SMSLOGON share on the site server, SMSMan.exe can
use the site server as a logon point. Thus, Manual Discovery can be utilized without creating shares on a
domain controller. It is still necessary to enable Windows Networking Logon Discovery, but it isn’t
necessary to list any domains, as demonstrated in Figure 5.




                            Figure 5: Windows Networking Logon Discovery
         To create the SMSLOGON share on the site server, one needs to know what files and folders SMS
places in the share. To do this, Windows Networking Logon Discovery was enabled for a test domain and


                                                                                                          15
the SMSLOGON folder was copied to the SMS site server. Appendix A lists the files and folders
contained in SMSLOGON.
         One problem with this solution is that the SMSLOGON share also contains information about the
site boundary that clients use to determine if they are within the boundary. If Windows Networking Logon
Discovery is used in the usual way, then SMS simply updates files in SMSLOGON when the boundary is
modified. But with this scenario, the site server is unaware that it itself has the SMSLOGON share, so it
cannot update boundary information automatically. Therefore, whenever the boundary changes, the
process of creating temporary SMSLOGON shares on a test domain and then copying the files to the site
server must be repeated.




                                                                                                      16
Package Distribution
        To distribute software packages via SMS, the SMS administrator first needs to activate the
Advertised Programs Client Agent. Figure 6 shows the list of agents that can be enabled in the SMS
Administrators Console.




                                     Figure 6: SMS Client Agents




                                                                                                     17
        To enable an agent, right click the agent and select Properties. Once an agent is enabled, SMS
automatically distributes it to all clients. Figures 7 and 8 show the property pages for the Advertised
Program Client Agent.




                                 Figure 7: General Properties for Agent




                                                                                                          18
Figure 8: Notification Properties for Agent




                                              19
         Once the Advertised Programs Client Agent is enabled, the SMS administrator can define
packages for distribution. Figure 9 shows where the packages are located in the SMS Administrators
Console. To create a new package, right click the Packages folder, select new, then select Package or
Package from Definition. Some software vendors may have anticipated that organization may be using
SMS to distribute their software and provided a package definition file (*.sms) to automate the creation of
the package; providing package settings optimized for the vendor’s software. Microsoft supplies .sms files
for much of its client software, but the practice is not widespread.




                                      Figure 9: Packages Container




                                                                                                        20
        There are two important panels in the Packages Properties that should be configured for every
package, General and Data Source. The default values on the other panels can be kept. Figure 10 shows
the General tab; Figure 11 shows the Data Source tab.




                                Figure 10: General Tab for Packages




                                                                                                        21
                                  Figure 11: Data Source for Packages
Remember: a package does not need to contain any files; it could contain only instructions such as a
command to run a virus scan.




                                                                                                       22
          The next step in creating the package is to define on which Distribution Points to make the
package available. Distribution Points are SMS servers where clients retrieve the package from. This is
one of the SMS roles that can be distributed to other SMS servers throughout the network. If an SMS site
has a large number of clients, having all of them retrieve large packages from one server would severely
hinder the performance of that server. Figure 12 shows the contents of an individual package’s folder in
the SMS Administrators Console. To select which Distribution Points to use, right click Distribution
Points, choose new and then choose Distribution Points and select which server(s) you want to make the
package available from.




                                     Figure 12: Distribution Points




                                                                                                       23
         Next define what instructions, or Programs, should be included with the package. Figures 13, 14,
15, and 16 show the properties for a program. A package can contain multiple programs. A common
configuration is to have one program for installing a piece of software and another program for running the
software at SMS administrator defined intervals.




                               Figure 13: General Properties for Program




                                                                                                         24
Figure 14: Requirements Properties for Program




                                                 25
                           Figure 15: Environment Properties for Program
Note: Programs can run “Only when a user is logged on”, “Whether or not a user is logged on”, or “Only
when no user is logged on”.




                                                                                                         26
Figure 16: Advanced Properties for Program




                                             27
          Once a package is built and ready for distribution, the SMS administrator must create an
Advertisement to make clients aware that the package is available. Figure 17 shows where Advertisements
are listed in the SMS Administrators Console. To create a new Advertisement, right-click on the
Advertisements folder, select new, then select Advertisement.




                                      Figure 17: Advertisements




                                                                                                    28
         Figure 18 shows the General properties for an advertisement. After naming the advertisement,
select which package the advertisement applies to. Then select which program in the package that you
want to the client to run. Finally, select which collection you want the advertisement to apply to. A
collection is a set of computers, users, or global groups that you want to receive the advertisement.




                           Figure 18: General Properties for Advertisement




                                                                                                        29
         Figure 19 shows the Schedule tab of an Advertisement’s properties. Here the SMS administrator
defines when the members of the targeted collection will receive the advertisement. The administrator can
also define mandatory assignments, which can run with or without the client’s knowledge (depending on
how the program in the package is configured). The SMS administrator can also set an expiration date for
the advertisement.




                           Figure 19: Schedule Properties of Advertisements




                                                                                                       30
Defining Collections
         Advertisements are applied to collections, which consist of workstations, users, or global groups.
An object can be a member of multiple collections. Several collections are already available in SMS
automatically. These include “All Systems”, which contains every computer in the site; “All Users”, which
contains every user discovered through Windows NT User Account Discovery; “All User Groups”, which
contains every global group discovered by Windows NT User Group Discovery; and “All Windows 98
Systems” which contains all systems identified as running Windows 98. Unfortunately, SMS predates
Windows 2000, so no pre-defined collections for Windows 2000 systems exist and the SMS administrator
must create them.
         Collection membership can be determined by static assignment (the administrator places specific
objects in the collection), or member ship can be based on the results of queries to the SMS database.
Figure 20 shows where Collections are listed in the SMS Administrators Console.




                                           Figure 20: Collections
To create a new Collection, right-click the Collections folder, select new, and then select Collection.




                                                                                                          31
         The next series of figures will step through the properties for a collection of Windows 2000
Professional Service Pack 2 workstations. Figure 21 shows the Membership Rules properties for the
collection. Note that this collection is based on a query of the SMS database. A collection can have
multiple membership rules.




Figure 21: Membership Rules of Collection




                                                                                                        32
        Double-clicking a membership rule will bring up the rule’s properties window as shown in Figure
22. Clicking the Edit Query Statement button will bring up the properties of the query, as shown in Figure
23.




                                   Figure 22: Query Rules Properties




                                                                                                        33
Figure 23: Query Properties




                              34
Double-click a criterion to bring up the Criterion Properties, displayed in Figure 24.




                             Figure 24: Criterion Properties




                                                                                         35
         There are a great many values that can be queried from the database. Every piece of information
about hardware and software collected from the SMS clients and then stored in the database can be queried.
Figure 25 shows a subset of values that can be queried.




                            Figure 25: Some Attributes that can be Queried
         Now that a collection for all Windows 2000 systems with Service Pack 2 has been created, we can
apply advertisements to the collection. This was important in the pilot because we wanted to ensure that all
workstations installed Service Pack 2 before installing any other software.




                                                                                                         36
Limitations of Package Distribution in SMS
          The package distribution mechanism in SMS is not perfect. Besides the obvious complexity in
defining the package, the program, advertisement, and collection, there are some limitations in the behavior
of the system. If you’re using package distribution to install software, it is extremely difficult to know
whether or not the installation was successful. SMS can report that the advertisement was received by the
client agent, and will report whether or not the program in the package was run, and what the return code
was, but that doesn’t necessarily mean that the package was installed. The user could have cancelled
installation, the workstation could have been restarted in the middle of an installation, or there could be a
problem with the program itself. Also, if the SMS administrator realized that an installation was not
successful, it is difficult to retry the advertisement. Essentially, the administrator has to define another
advertisement, and if the new advertisement should only be applied to one or two systems on which the
installation failed, the administrator has to define a new collection.




                                                                                                          37
Hardware and Software Inventory
          To perform Hardware and Software Inventory of SMS clients, the Hardware Inventory Client
Agent and Software Inventory Client Agent must be enabled. The SMS administrator can set the schedule
for how often clients should be inventoried. Once information has been collected from the clients, it is
stored in the SMS database in SQL Server. To view the information collected about a resource, locate the
resource in the “All Systems” collection, right-click the resource and select All Tasks, then select Start
Resource Explorer. Figure 26 shows the resource explorer for a workstation in the AIS/W2K Pilot. Out of
the box, SMS has over 600 hardware properties defined.




                                    Figure 26: Hardware Inventory




                                                                                                       38
         Figure 27 displays detailed information collected about the memory in a workstation. Statistics
such as available virtual memory, total pagefile size, and total physical memory are shown.




                                     Figure 27: Memory Inventory




                                                                                                           39
         SMS can inventory files of specific types (such as all .exe or all .dll files on a system) and collect
information from the header of the file. That information can include filename, size, description, company
name, product name, and product version. However, SMS can only collect this information if it has been
included in the header of the file. Since including this information is not required of anyone creating a file,
SMS software inventory isn’t perfectly reliable. SMS software inventory is not equivalent to viewing an
“Add or Remove Programs” control panel for a workstation.
         Figure 28 shows the software inventory section of the resource explorer. Figure 29 shows some
information about .exe files that SMS determined were written by Microsoft (an expanded view of the
Manufacturer group).




                                       Figure 28: Software Inventory




                                                                                                            40
Figure 29: Software Inventory of Microsoft Products




                                                      41
Remote Desktop Control
          The Remote Tools Client Agent in SMS is meant to provide SMS administrators with the ability
to remotely control a workstation’s mouse and keyboard while viewing a real-time image of the user’s
screen. Thus, SMS administrators can take over the troubleshooting process for users who cannot be
helped over the phone. However, this agent uses outdated technology, especially where the screen capture
is concerned, and its performance is very sluggish. Radmin by Famatech provides significant
improvements in performance.
          For the AIS/W2K Pilot Project, this author developed scripts that act as wrappers around the
Radmin service to give users control over starting, stopping, and configuring Radmin. Users could
determine when the Radmin service was running and who could connect to their desktop and with what
level of access they could have. Shortcuts to these scripts were placed in the Start menu for All Users.
When a user runs a script, they are first prompted for the local administrator password. For political
reasons, it was assumed that participants of a larger pilot project would know their local administrator
password.
          Figure 30 shows the configuration options available for Radmin.




                             Figure 30: Configuration Options for Radmin
          There is no need for users to install the service, as that has already been done for them by the
installation script. Users could choose to remove the service, if they wish. The “Set password…” option
bring up the screen shown in Figure 31.




                                                                                                         42
                                     Figure 31: Passwords for Radmin
          Radmin can integrate with NT security, meaning that NT/2000 domain users and groups can be
granted access; the user doesn’t need to create local users on her workstation and set passwords herself.
Thus, if there were a “4-Help Consultant” group within the Hokies domain, a user who is prompted by 4-
Help to initiate Radmin could click on the “Permissions” button to bring up the screen shown in Figure 32.




                            Figure 32: NT/2000 User and Groups for Radmin
          By clicking on “Add…” the user can select users and groups from the domain that her workstation
is a member of. Each user or group can be assign one or more of these access rights: no access, redirect,
telnet, view of screen, file transfer, full control of screen, and all access. Thus, after the user has added “4-
Help Consultants” to the registered users for her Radmin service, she can assign them “view of screen”
access and the 4-Help consultant can talk her through the troubleshooting steps without taking control of
her system.




                                                                                                              43
         Clicking the “Options” button shown in Figure 30 will bring up the window shown in Figure 33.




                                 Figure 33: Options for Radmin Service

          Users can enumerate which IP addresses are allowed to connect to the Radmin service on their
workstation. Users can also force the Radmin service to prompt them to permit the connecting user to have
access. The default response to the prompt is to deny the connection, so that if the user is away from their
workstation during an attempted connection, it is automatically refused. These options can be pre-
configured during Radmin installation. For example, if there were a known list of IP addresses for 4-Help
stations that would be attempting to connect to Radmin, then those IP addresses could be added to
Radmin’s IP filter. Connections from any other IP addresses would automatically be refused.
          Appendix B contains source code for the Radmin installation and configuration scripts that were
used in the pilot project. Those scripts were written in WinBatch. The appendix also contains the Target
field used in the shortcuts placed in the Start menu.




                                                                                                         44
Packages
         The packages that were distributed by SMS in the AIS/W2K Pilot Project were Acrobat Reader,
Aladdin Expander, Banner 5x, Black Ice Agent, Daisy, Eudora, Event Mirror, Internet Explorer 6, Meeting
Maker, Norton Anti-Virus Corporate Edition, Netscape 6.1, Office XP, Radmin, SSH, Windows 2000
Service Pack 2, and WS_FTP. The following sections will describe the steps taken to build the setup
program for each package (when necessary), building the package in SMS, configuring programs, and
creating advertisements. For all packages, the Distribution Point is the SMS site server, Yori, because it
was the only machine in the site assigned that role.

Internet Explorer 6
         The Internet Explorer Administration Kit (IEAK) was used to build the setup program for Internet
Explorer (IE) 6. The IEAK allows organizations to build customized editions of IE and Outlook Express.
Organizations can determine how the IE setup behaves (e.g., whether or not the user can interact with
setup), how IE will run (default homepage, disallow certain websites), and pre-configure personal settings
for Outlook Express. For the AIS/W2K Pilot Project, the following settings were chosen (all other IEAK
options were left with default settings):
         - Completely silent installation.
         - Enable logon after restart with user-level access
         - Customize title bar (W2K/AIS Pilot Project)
         - Homepage URL (https://portal.vt.edu)
         - Do not display a welcome page.

          The option to enable logon after restart with user-level access is the most important. After
installing IE, the workstation must be rebooted. For the average IE installer, critical system updates have to
be performed after the user has logged back onto their machine after the reboot. If that user lacks
administrative privileges, then the system updates will fail and IE will be unusable. Selecting the option to
restart with user-level access modifies the IE installation in some way to prevent this failure.


Netscape 6.1
        Netscape 6.0 would not work in the AIS/W2K pilot environment, mostly because it did not
understand folder redirection/offline stores. Netscape 6.1 is a vastly improved product. The Netscape
Client Customization Kit (CCK) was used to customize the installation and configuration of Netscape,
much as the IEAK was used with IE. However, most of the Netscape changes were cosmetic. Real Player
and Winamp were automatically included in the Netscape package.

Banner 5.x
         A unique Banner 5.x installer was developed for the pilot project. Since every user in the pilot
had the same desktop configuration (i.e., all programs were installed onto the D: partition), it was possible
to automate the Banner installer so that the user did not have to make any decisions. The UberUpdater and
LoadBalancing software was also incorporated into the Banner installer. One problem with the package
that was discovered too late to include the fix in the installer was that User accounts, by default, do not
have write access to the Program Files folder. UberUpdater and LoadBalancing reside in sub-folders of
Program Files, and they need to write to their directories. Since a User cannot write to those directories,
when the user starts the program, but the program cannot write to its directory, the program fails. Giving
the User write access to “Program Files\UU” and “Program Files\LoadBal” folders resolves this issue.
Appendix C contains the setup.rul script file for the Banner 5.x installer as well as a list of files included in
the package.

Windows 2000 Service Pack 2
         Appendix D contains an excerpt from Microsoft’s “Windows 2000 Service Pack Installation and
Deployment Guide”. The steps in the Guide for installing Service Packs via SMS were followed in the
pilot and seemed to work fairly well. Demonstrating the ability to deploy service packs and other software
updates was seen as a necessary feature for any remote desktop management software. We also wanted to
make sure that new clients received Service Pack 2 before any other software. To that end, we created a


                                                                                                              45
“Windows 2000 Pre-Service Pack 2” collection and a “Windows 2000 Service Pack 2” collection. Only
the Service Pack 2 advertisement was applied to the Pre-Service Pack 2 collection. Therefore, only after
SMS recognized that a client had installed Service Pack 2 was it placed in the “Windows 2000 Service
Pack 2” collection and then began receiving advertisements for other software. This seemed to work in
most cases, but occasionally a client would fail to install Service Pack 2 and would never be moved out of
the “Pre-Service Pack 2” collection. In these cases, a manual installation of Service Pack 2 was required.

Black Ice Agent and Norton AntiVirus Corporate Edition
         Since these two programs were being managed by servers maintained by Marc DeBonis, he used
tools provided by Black Ice and Norton to build client installers. Setting them up for installation by SMS
required minimal effort.

Office XP
          Follow this link to the Office XP Resource Kit:
http://www.microsoft.com/technet/treeview/default.asp?url=/TechNet/prodtechnol/office/reskit/officexp/of
xprkit.asp
Within the Resource Kit is a chapter title Deployment, which contains a section called “Installing and
Customizing Office”. Within that section are instructions for creating an Administrative Installation Point
(AIP) for Office XP. An AIP allows an administrator to enter a product key and accept a license agreement
for everyone in the organization to whom the administrator is distributing Office. Users who download
Office from this AIP will not be asked during installation to enter a product key or accept the End User
License Agreement. Obviously, within an SMS environment the Office installer is being delivered to
users, but the end result is the same: no users need to remember the product key.
          Later in the Resource Kit article is a discussion about using Microsoft Installer Transform files
(*.MST) to modify the Office XP installer. In theory, MST files can be used to configure Office features
for users, such as setting up an Outlook profile. Users could install Office from SMS and Outlook would
be pre-configured to work with the campus Exchange server. However, applying a MST file to the AIP in
the pilot resulted in breaking the AIP distribution. That is to say, after applying the MST, users were
queried for product keys. This behavior was unexpected and could not be resolved, so MST files were
abandoned.
          Another error with the Resource Kit article: it references setup.exe in the AIP folder. That file did
not exist after installing the AIP. Setuppro.exe was used instead and seemed to work fine.

Eudora
          The Eudora installer provided by Qualcomm has the ability to place a user’s mailbox files in a
separate directory from the application files. This allows users to place their mail in their profile folder, but
leave the application file in the Program Files directory. Since in this managed environment we were
trying to automate installers as much as possible, I tried to deconstruct this logic and write an installer that
automatically placed a user’s mailbox in her profile. If that succeeded, then her mail would be redirected to
the NAS and would be attainable from any system she logged on to. However, I never quite managed to
perfect the installer and there are still problems with it. The biggest obstacle was that installations ran
under the SMSService context, not the user’s context. Thus, the installer needed a way to discover who the
currently logged on user actually was, and where that person’s profile was stored. I never did quite resolve
that problem.




                                                                                                              46
Final Critique of SMS
         SMS is overkill. Given what the University is interested in doing with desktop management
(namely, remote installation of software and patches), SMS provides too many unwanted features. The
extra complexity in SMS makes the software difficult to manage. Managing the SMS site would require a
full-time administrator. It would be worth the effort to investigate other desktop management solutions,
such as IntelliMirror.
         Furthermore, the current release of SMS is still very buggy. There is rumor of future versions of
the product that will include integration with Active Directory. Perhaps these future editions should be re-
examined.

Pricing
          To support 50 users with SMS 2.0 SP3, the following licenses must be purchased:
                  SMS 2.0 Server license with 25 Client Access Licenses (CALs) - $1,779
                  20 CAL license pack                                            - $889
                  5 CAL license pack                                             - $239
                  Subtotal: $2907

         Additionally, SQL Server 2000 must be purchased to store the database for SMS. If the SQL
Server installation is dedicated to SMS activities, then only the server license needs to be purchased.
However, on Microsoft’s website the only price I can find for SQL Server includes 5 CALs.
                   SQL Server 2000 with 5 CALs                                       - $1,489
                   Subtotal: $4,396




                                                                                                          47
Appendix A
D:\SMSLOGON on Prefect.heartofgold.w2k-pilot.vt.edu

Folder security:
         Administrator = Full Control
         Everyone = Read & Execute, List Folder Contents, Read

SMSLOGON share:
     Permissions:
             Administrators: Full Control
             Everyone: Full Control

----------------------------------------------------------------------
Contents

D:\SMSLOGON
        \ALPHA.bin
               boot32wn.exe
               clicore.exe
               slwnt32.exe
               smsboot1.exe
                   \00000409
                          SMSMan.exe
        \CONFIG
               CopyLog.tcf
               DOS.TCF
               SMSMAN.tcf
               WIN16.TCF
               WIN95.TCF
               WINNT.TCF
        \LOGS
        \SITES
                \AIS
                 caplist.ini
                 cli_inst.cfg
                 compver.ini
                 NETCONF.NCF
        \SITESCFG
               AIS_CFG.LCF
               discovery.lst
               MasterCFG.MCF
               sitelist.lst
        \x86.bin
               boot16wn.exe
               boot32wn.exe
               bootdwn.exe
               clicor16.exe
               clicore.exe
               slwnt16.exe
               slwnt32.exe
               smsboot1.exe
                 \00000409
                          Manboot.exe
                          SMSMan.exe
                          SMSMan16.exe


                                                                         48
Appendix B – Radmin scripts
These programs were written in WinBatch. Semi-colons represents comments.
Radmin.zip contains the files included in the Radmin package.

;rad_setup.wbt -- This program will install Radmin and configure it.

AddExtender("WWZIP34I.DLL") ;Zip Extender
AddExtender("WWWNT34i.DLL") ;Windows Networking Extender

;unzip files to %ProgramFiles%\Radmin
ProgFiles = Environment("ProgramFiles")
TargetDir = "%ProgFiles%\Radmin"

zUnZipFiles("u o", "Radmin.zip", "*.*", "", TargetDir)

;if (bSuccess != 0)
;        Message("Error", "Radmin did not unzip correctly. Return code is %bSuccess%.")
;        exit
;endif

if !FileExist("%TargetDir%\r_server.exe")
         Message("Error", "%TargetDir%\r_server.exe not found")
         exit
endif

;Now, run r_server to install the service and video hook
bSuccess = RunHideWait(Environment("COMSPEC"), "/C %TargetDir%\R_server.exe /install /silence")
if !bSuccess
         Message("Error", "cannot run r_server")
         exit
endif

;create registry keys
basekey = RegCreateKey(@REGMACHINE, "SYSTEM\RAdmin\v2.0\Server")
RegCreateKey(basekey, "iplist")
Paramkey = RegCreateKey(basekey, "Parameters")

RegSetBin(Paramkey, "[NTAuthEnabled]", "01 00 00 00")
RegSetBin(Paramkey, "[NTAuthId]", "03 00 00 00")
RegSetBin(Paramkey, "[Port]", "23 13 00 00")
RegSetBin(Paramkey, "[EnableLogFile]", "00 00 00 00")
RegSetBin(Paramkey, "[FilterIp]", "00 00 00 00")
RegSetBin(Paramkey, "[DisableTrayIcon]", "00 00 00 00")
RegSetBin(Paramkey, "[AskUser]", "00 00 00 00")
RegSetEx(Paramkey, "[LogFilePath]", "C:\radminlog.txt", "", 1)

userkey = RegCreateKey(basekey, "Users")
userkey = RegCreateKey(userkey, "Domain Admins")

RegSetDword(userkey, "[Access]", 31)
RegSetDword(userkey, "[IsGroup]", 8)

ProgFiles = Environment("ProgramFiles")

;make sure service is installed


                                                                                              49
;if (!wntSvcStatus("", "r_server", 1000, 0))
          ;if it doesn't exist, install it
          ;TargetDir = "%ProgFiles%\Radmin"
          ;RunWait(Environment("COMSPEC"), "%TargetDir%\R_server.exe /install")
;endif

;if the service still has not installed
if (!wntSvcStatus("", "r_server", 1000, 0))
           ;then we'll create the service ourself
           ServiceName = "r_server"
           DisplayName = "Remote Administration Service"
           BinaryPathName = '"%ProgFiles%\Radmin\R_server.exe" /service'
           LoadOrderGroup = ""
           ServiceStartName = "LocalSystem"
           Password = ""
           createstring = StrCat(ServiceName, "|", DisplayName, "|", BinaryPathName, "|",
LoadOrderGroup, "|", ServiceStartName, "|", Password)
           ServiceType = 256|16
           StartType = 3
           ErrorControl = 1
           createflags = Strcat(ServiceType, "|", StartType, "|", ErrorControl)
           wntSvcCreate("", createstring, createflags, "", "")
           ;Message("ra_start", "Done adding r_server as a service")
endif

;move shortcuts to Start menu
allusers = Environment("ALLUSERSPROFILE")
startdir = "%allusers%\Start Menu\Programs\Remote Administration"
if !DirExist(startdir) then DirMake(startdir)

;I'm going to copy the shortcuts from TargetDir to startdir

DirChange(TargetDir)

name = "Start Remote Administration.lnk"

if FileExist("%startdir%\%name%") then FileDelete("%startdir%\%name%")

FileCopy(name, "%startdir%\%name%", @FALSE)

;icontarget = "%TargetDir%\r_server.exe"
;target = 'runas /user:Administrator "%TargetDir%\r_server.exe /start"'
;param = ""

;ShortcutMake(name, target, param, "", @NORMAL)
;ShortcutExtra(name, "Start Radmin", "", icontarget, 1)

name = "Stop Remote Administration.lnk"
if FileExist("%startdir%\%name%") then FileDelete("%startdir%\%name%")

FileCopy(name, "%startdir%\%name%", @FALSE)

;param = ""
;target = 'runas /user:Administrator "%TargetDir%\r_server.exe /stop"'

;ShortcutMake(name, target, param, "", @NORMAL)


                                                                                            50
;ShortcutExtra(name, "Stop Radmin", "", icontarget, 2)

;make a shortcut for /setup
name = "Configure Remote Administration.lnk"
;target = 'runas /user:Administrator "%TargetDir%\r_server.exe /setup"'
;param = ""

FileCopy(name, "%startdir%\%name%", @FALSE)

;ShortcutMake(name, target, param, "", @NORMAL)
;ShortcutExtra(name, "Setup Radmin", "", icontarget, 1)

exit


Target Field for Shortcuts – At first, I wrote a script to handle starting and stopping the service; then I
realized that the simpler approach was to provide shortcuts where the Target field was a call to runas.exe.
Parameters to runas.exe include the user account that you want to run an application under, as well as
which application to run. In this case, r_server.exe (included with the Radmin package) has command-line
switches for configuring Radmin, starting Radmin, and stopping Radmin.

“Configure Remote Administration.lnk” : C:\WINNT\system32\runas.exe
/user:%COMPUTERNAME%\Administrator "%ProgramFiles%\Radmin\r_server.exe /setup"

“Start Remote Administration.lnk” : C:\WINNT\system32\runas.exe
/user:%COMPUTERNAME%\Administrator "%ProgramFiles%\Radmin\r_server.exe /start"

“Stop Remote Administration.lnk” : C:\WINNT\system32\runas.exe
/user:%COMPUTERNAME%\Administrator "%ProgramFiles%\Radmin\r_server.exe /stop"




                                                                                                        51
Appendix C
Setup.rul file for Banner 5.x for SMS


////////////////////////////////////////////////////////////////////////////////
//
// IIIIIII SSSSSS
// II SS                               InstallShield (R)
// II SSSSSS                 (c) 1996-1998, InstallShield Software Corporation
// II          SS (c) 1990-1996, InstallShield Corporation
// IIIIIII SSSSSS                           All Rights Reserved.
//
//
// This code is generated as a starting setup template. You should
// modify it to provide all necessary steps for your setup.
//
//
// File Name: Setup.rul
//
// Description: InstallShield script
//
// Comments: This template script performs a basic setup. With minor
//              modifications, this template can be adapted to create
//              new, customized setups.
//
////////////////////////////////////////////////////////////////////////////////


// Include header files

   #include "sdlang.h"
   #include "sddialog.h"

////////////////////// string defines ////////////////////////////

   #define UNINST_LOGFILE_NAME                            "Uninst.isu"

//////////////////// installation declarations ///////////////////

// ----- DLL function prototypes -----


   // your DLL function prototypes


// ---- script function prototypes -----

   // generated by the Project Wizard
   prototype ShowDialogs();
   prototype MoveFileData();
   prototype HandleMoveDataError( NUMBER );
   prototype ProcessBeforeDataMove();
   prototype ProcessAfterDataMove();
   prototype SetupRegistry();
   prototype SetupFolders();


                                                                                   52
  prototype CleanUpInstall();
  prototype SetupInstall();
  prototype SetupScreen();
  prototype CheckRequirements();
  prototype DialogShowSdWelcome();
  prototype DialogShowSdLicense();
  prototype DialogShowSdFinishReboot();

  // your script function prototypes


  // ----- global variables ------

  // generated by the Project Wizard
  BOOL        bIsWindowsNT4, bIsWindowsNT351, bIsWindows98, bIsWindows95;
  BOOL        bIsShellExplorer, bInstallAborted, bIs32BitSetup;
  STRING       svDir;
  STRING       svName, svCompany, svSerial;
  STRING       svDefGroup;
  STRING       szAppPath;
  STRING       svSetupType;


  // your global variables


///////////////////////////////////////////////////////////////////////////////
//
// MAIN PROGRAM
//
// The setup begins here by hiding the visible setup
//      window. This is done to allow all the titles, images, etc. to
//     be established before showing the main window. The setup is
//     then performed in a series of calls to script defined functions,
//      with error checking at each step.
//
///////////////////////////////////////////////////////////////////////////////
program
    Disable( BACKGROUND );

  CheckRequirements();

  SetupInstall();

  SetupScreen();

  if (ShowDialogs()<0) goto end_install;

  if (ProcessBeforeDataMove()<0) goto end_install;

  if (MoveFileData()<0) goto end_install;

  if (ProcessAfterDataMove()<0) goto end_install;

  if (SetupRegistry()<0) goto end_install;




                                                                                  53
   if (SetupFolders()<0) goto end_install;


   end_install:

   CleanUpInstall();

   // If an unrecoverable error occurred, clean up
   // the partial installation. Otherwise, exit normally.

   if (bInstallAborted) then
      abort;
   endif;

endprogram

///////////////////////////////////////////////////////////////////////////////
//
// Function: ShowDialogs
//
// Purpose: This function manages the display and navigation of
//           the standard dialogs that exist in a setup.
//
///////////////////////////////////////////////////////////////////////////////
function ShowDialogs()
    NUMBER nResult;

begin

   Dlg_Start:
   // beginning of dialogs label

   Dlg_SdWelcome:
   nResult = DialogShowSdWelcome();
   if (nResult = BACK) goto Dlg_Start;

   Dlg_SdLicense:
   nResult = DialogShowSdLicense();
   if (nResult = BACK) goto Dlg_SdWelcome;

   return 0;

end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: ProcessBeforeDataMove
//
// Purpose: This function performs any necessary operations prior to the
//          actual file transfer.
//
///////////////////////////////////////////////////////////////////////////////
function ProcessBeforeDataMove()
    STRING svLogFile;
    NUMBER nResult;




                                                                                  54
begin

 // Create app information, uninstallation, and App Paths registry keys.

 InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION,
@PRODUCT_KEY );

   svLogFile = UNINST_LOGFILE_NAME;

   nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 );
   if (nResult < 0) then
      MessageBox( @ERROR_UNINSTSETUP, WARNING );
   endif;

   szAppPath = TARGETDIR; // TO DO : if your application .exe is in a subfolder
                // of TARGETDIR then add subfolder

   if ((bIs32BitSetup) && (bIsShellExplorer)) then
      RegDBSetItem( REGDB_APPPATH, szAppPath );
      RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY );
      RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME );
   endif;

   // TO DO : any other tasks you want to perform before file transfer
   //
   // If you are installing self-registering files using the
   // batch method, remove the slashes from the line below:
   //
   // Enable ( SELFREGISTERBATCH );

  return 0;
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: MoveFileData
//
// Purpose: This function handles the file transfer for
//           the setup.
//
///////////////////////////////////////////////////////////////////////////////
function MoveFileData()
    NUMBER nResult, nDisk;

begin

   nDisk = 1;
   SetStatusWindow( 0, "" );
   Disable( DIALOGCACHE );
   Enable( STATUS );
   StatusUpdate( ON, 100 );
   nResult = ComponentMoveData( MEDIA, nDisk, 0 );

   HandleMoveDataError( nResult );

   Disable( STATUS );


                                                                                  55
  return nResult;

end;


///////////////////////////////////////////////////////////////////////////////
//
// Function: HandleMoveDataError
//
// Purpose: This function handles the error (if any) during the file transfer
//          operation.
//
///////////////////////////////////////////////////////////////////////////////
function HandleMoveDataError( nResult )
    STRING szErrMsg, svComponent , svFileGroup , svFile;

begin

  svComponent = "";
  svFileGroup = "";
  svFile = "";

  switch (nResult)
    case 0:
       return 0;
    default:
       ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult );
       szErrMsg = @ERROR_MOVEDATA + "\n\n" +
          @ERROR_COMPONENT + " " + svComponent + "\n" +
          @ERROR_FILEGROUP + " " + svFileGroup + "\n" +
          @ERROR_FILE       + " " + svFile;
       SprintfBox( SEVERE, @TITLE_CAPTIONBAR, szErrMsg, nResult );
       bInstallAborted = TRUE;
       return nResult;
  endswitch;

end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: ProcessAfterDataMove
//
// Purpose: This function performs any necessary operations needed after
//          all files have been transferred.
//
///////////////////////////////////////////////////////////////////////////////
function ProcessAfterDataMove()
    STRING szReferenceFile, szMsg;

begin

  // TO DO : update self-registered files and other processes that
  //      should be performed after the files have been transferred.
  //
  // If you are installing self-registering files using the


                                                                                  56
   // batch method, remove the slashes from the lines below:
   //
   // if Do ( SELFREGISTRATIONPROCESS ) < 0 then
   //      szMsg = "File(s) failed to self-register: \n" + ERRORFILENAME;
   //      MessageBox (szMsg, WARNING);
   // endif;

   // DeinstallSetReference specifies a file to be checked before
   // uninstallation. If the file is in use, uninstallation will not proceed.

   szReferenceFile = svDir ^ @PRODUCT_KEY; // TO DO : If your file is in a
                           // subfolder of svDir add that here
   DeinstallSetReference( szReferenceFile );

  return 0;
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: SetupRegistry
//
// Purpose: This function makes the registry entries for this setup.
//
///////////////////////////////////////////////////////////////////////////////
function SetupRegistry()
    NUMBER nResult;
    STRING szKey, szName, szValue, szSubKey;
    NUMBER nType, nSize;
    STRING szNameShare, szValueShare, szIDKey;

begin

   // TO DO : Add all your registry entry keys here.
   // Call registry functions and/or create keys from
   // the InstallShield IDE's Resources pane.

          RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

   //pretty much, everything is RegSz
   nType = REGDB_STRING_EXPAND;

   //keys where data depends on Oracle home location
   szKey = "Software\\Oracle";
   szName = "ORACLE_HOME";
   szValue = TARGETDIR;
   RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

   szName = "SHARED_ORACLE_HOME";
   RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

   szName = "CA_GPREFS";
   RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

   szName = "CA_UPREFS";
   RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);




                                                                                  57
szName = "API";
szValue = TARGETDIR ^ "DBS";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "FORMS60";
szValue = TARGETDIR ^ "FORMS60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "VGS60";
szValue = TARGETDIR ^ "TOOLS\\COMMON60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DE60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "UI60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "MM60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "TK60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DOC60";
szValue = TARGETDIR ^ "TOOLS\\DOC60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "doc60_nls";
szValue = TARGETDIR ^ "TOOLS\\DOC60\\us";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "RDBMS80";
szValue = TARGETDIR ^ "RDBMS80";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "PLSQL80";
szValue = TARGETDIR ^ "PLSQL80";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "CORE40";
szValue = TARGETDIR ^ "CORE40";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "NLSRTL33";
szValue = TARGETDIR ^ "NLSRTL33";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "ORA_NLS33";
szValue = szValue ^ "DATA";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "PRO80";
szValue = TARGETDIR ^ "PRO80";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);




                                                         58
szName = "OTRACE80";
szValue = TARGETDIR ^ "OTRACE80";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "NET80";
szValue = TARGETDIR ^ "net80";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "OIN60";
szValue = TARGETDIR ^ "OIN60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "ORAINFONAV_DOCPATH";
szValue = TARGETDIR ^ "OIN";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "ORACLE_JDK";
szValue = TARGETDIR ^ "JDK";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "RW60";
szValue = TARGETDIR ^ "REPORT60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "BROWSER60";
szValue = TARGETDIR ^ "BROWSE60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "GRAPHICS60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "OCL60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "GRAPHOGD60";
szValue = TARGETDIR ^ "GRAPH60\\GWIZ_OGD";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "GRAPHBMP60";
szValue = TARGETDIR ^ "GRAPH60\\GWIZ_BMP";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "GWIZARD60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_EXPRESS_UI";
szValue = TARGETDIR ^ "bin";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "GSINSTALLDIR";
szValue = TARGETDIR ^ "olap\\ece620";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);




                                                         59
szName = "GSCONNECTDIR";
szValue = TARGETDIR ^ "olap\\ecf620";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_PATH";
szValue = ".;" + TARGETDIR ^ "REPORT60\\ADMIN\\TEMPLATE\\US;" +
     TARGETDIR ^ "REPORT60";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_TMP";
szValue = TARGETDIR ^ "REPORT60\\TMP";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_JNI_LIB";
szValue = TARGETDIR ^ "jdk\\bin\\javai.dll";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_CLASSPATH";
szValue = TARGETDIR ^ "jdk\\lib\\classes.zip;" +
     TARGETDIR ^ "REPORT60\\java\\jars\\myreports60.jar" +
     TARGETDIR ^ "REPORT60\\java\\jars\\xmlparser.jar";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);


//keys whose data is not dependent on Oracle Home location or OS
szName = "ORACLE_HOME_NAME";
szValue = "DEFAULT_HOME";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "NLS_LANG";
szValue = "AMERICAN_AMERICA.WE8ISO8859P1";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "COMPANY_NAME";
szValue = "Virginia Tech";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "QT_PLAYER";
szValue = "OMO";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DEV2000_SOURCECONTROL";
szValue = "NONE";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DEV2000_PROJECT";
szValue = "NONE";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DEV2000_SCVIEWER";
szValue = "NOTEPAD.EXE";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DEV2000_SCCONVERT";
szValue = "FALSE";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);


                                                                   60
szName = "REPORTS_RUNTIME";
szValue = "rwrun60.exe";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS_BUILDER";
szValue = "rwbld60.exe";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "REPORTS60_SPLASH";
szValue = "TRUE";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);



//keys whose data are dependent on OS
szName = "ORACLE_GROUP_NAME";
szValue = "Oracle for Windows NT";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);


//----------------------------------------------------------
//Oracle Data Browser reg values
szName = "VGS21";
szValue = TARGETDIR ^ "TOOLS\\COMMON";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "DE15";
//same value
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "OTM25";
szValue = TARGETDIR ^ "OTM25";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "TK23";
szValue = TARGETDIR ^ "TOOLS\\COMMON";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "MM20";
//same value
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "RDBMS73";
szValue = TARGETDIR ^ "RDBMS73";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "OTRACE73";
szValue = TARGETDIR ^ "OTRACE73";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "PLSQL23";
szValue = TARGETDIR ^ "PLSQL23";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "PRO18";


                                                               61
szValue = TARGETDIR ^ "PRO18";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "NLSRTL32";
szValue = TARGETDIR ^ "NLSRTL32";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "ORA_NLS32";
szValue = TARGETDIR ^ "NLSRTL32\\DATA";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);

szName = "BROWSER20";
szValue = TARGETDIR ^ "BROWSE20";
RegDBSetKeyValueEx(szKey, szName, nType, szValue, -1);




//----------------------------------------------------------

//subkeys of HKLM\\software\\oracle
szSubKey = szKey + "\\ALL_HOMES";
nType = REGDB_STRING;

szName = "HOME_COUNTER";
szValue = "1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "DEFAULT_HOME";
szValue = "DEFAULT_HOME";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "LAST_HOME";
szValue = "0";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//next subkey
szSubKey = szKey + "\\ALL_HOMES\\ID0";

szName = "NAME";
szValue = "DEFAULT_HOME";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "PATH";
szValue = TARGETDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "NLS_LANG";
szValue = "AMERICAN_AMERICA.WE8ISO8859P1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey + "\\ALL_HOMES\\ID0\\w32ssf60\\Map Vars";

szName = "WIN_SYS_LOC";
szValue = WINSYSDIR;


                                                               62
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "OCA60";
szValue = TARGETDIR ^ "OCA60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "WINDOWS_SYS_DIR";
szValue = WINSYSDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ut60";

szName = "Shareable";
szValue = "TRUE";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,UI60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,UI60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32mm60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,MM60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//more subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32mm60\\Map Vars";

szName = "MM60";
szValue = TARGETDIR ^ "TOOLS\\COMMON60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ucol60";

szName = "Shareable";
szValue = "TRUE";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey, but same value name and data
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32uat60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//ditto
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32rsf80";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);


                                                                                   63
//subkey of previous subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Full Download";
szValue = "deinstl,msvcdll,mfcdll,commdll,dll,msg,sql,nlsdata,user,shrdll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Run From Server";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32rsf80\\Map Vars";

//these will all have same relative values, different names
szName = "CORE40";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "NLSRTL33";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "OTRACE80";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "PLSQL80";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "PRO80";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "RDBMS80";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "WINSYS";
szValue = WINSYSDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32rsf80\\Registry Backup\\Outside locations";

szName = "1";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,RDBMS80,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,PLSQL80,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);


                                                                                     64
szName = "3";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,CORE40,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "4";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,NLSRTL33,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "5";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,ORA_NLS33,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "6";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,PRO80,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "7";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,OTRACE80,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32netclt80";

szName = "Shareable";
szValue = "TRUE";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//subkey of subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Full Download";
szValue = "deinstl,tns,ostns,sample,templates,docs,tnsapi,msb";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//next two have different names, same value
szName = "EXEs DLLs Download";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Run From Server";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//different subkey
szSubKey = szKey ^ "ALL_HOMES\\IS0\\w32netclt80\\Registry Backup\\Outside locations";

szName = "1";
szValue = "HKEY_LOCAL_MACHINE,SOFTWARE\\ORACLE,NET80,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32tcp80";

szName = "Shareable";
szValue = "TRUE";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);




                                                                                        65
//subkey of subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Full Download";
szValue = "deinstl,dll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//next two have same value, different names
szName = "EXEs DLLs Download";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Run From Server";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32nmp80";

szName = "Shareable";
szValue = "TRUE";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//subkey of subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Full Download";
szValue = "deinstl,dll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//next two have same value
szName = "EXEs DLLs Download";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Run From Server";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ca60";

szNameShare = "Shareable";
szValueShare = "TRUE";
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,CA_GPREFS,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,CA_UPREFS,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ca60\\Map Vars";




                                                                      66
szName = "CA_UPREFS";
szValue = TARGETDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "CA_GPREFS";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32d2sc60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,DOC60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32oin60";

//shareable values
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,OIN60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,ORAINFONAV_DOCPATH,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "3";
szValue = "$ORACLE,,ORAINFONAV_CDPATH,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32oin60\\Map Vars";

szName = "OIN60";
szValue = TARGETDIR ^ szName;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32jdkav";

//shareable values
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,ORACLE_JDK,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey


                                                                                     67
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32jdkav\\OCSM Groups";

szName = "EXEs DLLs Download";
szValue = "exe";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ge60";

//shareable values
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,GRAPHOGD60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,GRAPHBMP60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "3";
szValue = "$ORACLE,,GWIZARD60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//Another subkey
szSubKey = szKey ^ "ALL_HOMES\\ID0\\w32ge60\\Map Vars";

szName = "GRAPHICS60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//goddamnit, I'm tired of writing ALL_HOMES\\ID0
szIDKey = szKey ^ "ALL_HOMES\\ID0";

//another subkey
szSubKey = szIDKey ^ "w32ge60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
szValue = "dll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Full Download";
szValue = "res";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);




                                                                      68
//another subkey
szSubKey = szIDKey ^ "w32brqry60";

//shareable values
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,BROWSER60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//new subkey
szSubKey = szIDKey ^ "w32brqry60\\Map Vars";

szName = "BROWSER60";
szValue = TARGETDIR ^ "BROWSE60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_GROUP";
szValue = "Oracle Forms & Reports 6i";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//new subkey
szSubKey = szIDKey ^ "w32brqry60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Full Download";
szValue = "msg,res,dll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//new subkey
szSubKey = szIDKey ^ "w32qb60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,BROWSER60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//different subkey
szSubKey = szIDKey ^ "w32qb60\\Map Vars";

szName = "BROWSER60";
szValue = TARGETDIR ^ "BROWSE60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K_GROUP";


                                                                      69
szValue = "Oracle Forms & Reports 6i";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//yet another subkey
szSubKey = szIDKey ^ "w32qb60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
szValue = "exe";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Full Download";
szValue = "msg,res,sql";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//new subkey
szSubKey = szIDKey ^ "w32xru60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
szValue = "xr,XPData,XPDataLang:us,sql";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//new subkey
szSubKey = szIDKey ^ "w32xr60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,REPORTS60_EXPRESS_UI,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32xs60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Map Vars";


                                                                      70
szName = "rsnapi_home";
szValue = TARGETDIR ^ "olap\\osn620";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32xs60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Downloads";
szValue = "dll32,dll32nt";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32xc60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,GSINSTALLDIR,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,GSCONNECTDIR,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32xc60\\Map Vars";

szName = "GSINSTALLDIR";
szValue = TARGETDIR ^ "olap\\ece620";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "GSCONNECTDIR";
szValue = TARGETDIR ^ "olap\\ecf620";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32forms60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,FORMS60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32forms60\\Map Vars";

szName = "FORMS60";
szValue = TARGETDIR ^ "FORMS60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32tutil60";

//shareable crap


                                                                        71
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,VGS60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "2";
szValue = "$ORACLE,,DE60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "3";
szValue = "$ORACLE,,DOC60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32tutil60\\Map Vars";

szName = "VGS60";
szValue = TARGETDIR ^ "TOOLS\\COMMON60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//different name, same value
szName = "DE60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "CA_UPREFS";
szValue = TARGETDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//different name, same value
szName = "CA_GPREFS";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32tutil60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32tk60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//another subkey
szSubKey = szIDKey ^ "w32de60\\Map Vars";

szName = "DE60";
szValue = TARGETDIR ^ "TOOLS\\COMMON60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);




                                                                      72
//another subkey
szSubKey = szIDKey ^ "w32vgs60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,VGS60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32vgs60\\Map Vars";

szName = "VGS60";
szValue = TARGETDIR ^ "TOOLS\\COMMON60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32frun60\\Map Vars";

szName = "FORMS60";
szValue = TARGETDIR ^ "FORMS60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2KIF60_GROUP";
szValue = "Oracle Forms 6i";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32frun60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
szValue = "dll,exe";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Full Download";
szValue = "res";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32rrun60\\Map Vars";

szName = "RW60";
szValue = TARGETDIR ^ "REPORT60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "DOC60";
szValue = TARGETDIR ^ "TOOLS\\DOC60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2KOR60_GROUP";
szValue = "Oracle Reports 6i";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey


                                                                      73
szSubKey = szIDKey ^ "w32graph60";

//shareable crap
RegDBSetKeyValueEx(szSubKey, szNameShare, nType, szValueShare, -1);

//subkey of subkey
szSubKey = szSubKey ^ "OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32grun60\\Registry Backup\\Oracle locations";

szName = "1";
szValue = "$ORACLE,,OCL60,1,1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szIDKey ^ "w32grun60\\Map Vars";

szName = "GRAPHICS60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "DOC60";
szValue = TARGETDIR ^ "TOOLS\\DOC60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "OCL60";
szValue = TARGETDIR ^ "GRAPH60";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//yet anothe subkey
szSubKey = szIDKey ^ "w32grun60\\OCSM Groups";

szName = "Run From Server";
szValue = "deinst";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "EXEs DLLs Download";
szValue = "exe,dll";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "Full Download";
szValue = "res";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

//another subkey
szSubKey = szKey ^ "HOME0";

szName = "ID";
szValue = "0";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);




                                                                       74
szName = "ORACLE_HOME";
szValue = TARGETDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "ORACLE_HOME_NAME";
szValue = "DEFAULT_HOME";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "SHARED_ORACLE_HOME";
szValue = TARGETDIR;
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "API";
szValue = TARGETDIR ^ "DBS";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "NLS_LANG";
szValue = "AMERICAN_AMERICA.WE8ISO8859P1";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "COMPANY_NAME";
szValue = "Virginia Tech";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "ORACLE_GROUP_NAME";
szValue = "Oracle for Windows NT";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_COMPONENTS";
szValue = "Oracle Forms & Reports 6i Comps";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_ADMINISTRATION";
szValue = "Oracle Forms & Reports 6i Admin";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2KOR60_ADMINISTRATION";
szValue = "Oracle Reports 6i Admin";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2KIF60_ADMINISTRATION";
szValue = "Oracle Forms 6i Admin";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_DEMOS";
szValue = "Oracle Forms & Reports 6i Demos";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_DOCS";
szValue = "Oracle Forms & Reports 6i Doc";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

szName = "D2K60_GROUP";
szValue = "Oracle Forms & Reports 6i";
RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);




                                                            75
   szName = "D2KOR60_GROUP";
   szValue = "Oracle Reports 6i";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "D2KIF60_GROUP";
   szValue = "Oracle Forms 6i";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "D2K60_DRIVERS";
   szValue = "Oracle Forms & Reports 6i Direct Drivers";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "OPEN2K60_DOCS";
   szValue = "Oracle Forms & Reports 6i Doc";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   //another subkey
   szSubKey = szKey ^ "ORACLE_HOMES\\ORACLE0";

   szName = "ORACLE_HOME";
   szValue = TARGETDIR;
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "ORACLE_HOME_NAME";
   szValue = "DEFAULT_HOME";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "SHARED_ORACLE_HOME";
   szValue = TARGETDIR;
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "API";
   szValue = TARGETDIR ^ "DBS";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "NLS_LANG";
   szValue = "AMERICAN_AMERICA.WE8ISO8859P1";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "COMPANY_NAME";
   szValue = "Virginia Tech";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);

   szName = "ORACLE_GROUP_NAME";
   szValue = "Oracle for Windows NT";
   RegDBSetKeyValueEx(szSubKey, szName, nType, szValue, -1);


   nResult = CreateRegistrySet( "" );

   return nResult;

end;

///////////////////////////////////////////////////////////////////////////////
//


                                                                                  76
// Function: SetupFolders
//
// Purpose: This function creates all the folders and shortcuts for the
//          setup. This includes program groups and items for Windows 3.1.
//
///////////////////////////////////////////////////////////////////////////////
function SetupFolders()
    NUMBER nResult;

begin


   // TO DO : Add all your folders (or program groups) along with shortcuts (or
   // program items). Call CreateProgramFolder and AddFolderIcon, and/or create
   // shortcuts etc. from the InstallShield IDE's Resources pane.
   //
   // Note : for 16-bit setups you should add an uninstaller icon pointing to
   //     your log file. Under 32-bit this is automatically done by Windows.

   nResult = CreateShellObjects( "" );

  return nResult;
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: CleanUpInstall
//
// Purpose: This cleans up the setup. Anything that should
//          be released or deleted at the end of the setup should
//          be done here.
//
///////////////////////////////////////////////////////////////////////////////
function CleanUpInstall()

begin


   if (bInstallAborted) then
      return 0;
   endif;

   DialogShowSdFinishReboot();

   if (BATCH_INSTALL) then // ensure locked files are properly transferred
      CommitSharedFiles(0);
   endif;

  return 0;
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: SetupInstall
//
// Purpose: This will initialize the setup. Any general initialization


                                                                                  77
//          needed for the installation should be performed here.
//
///////////////////////////////////////////////////////////////////////////////
function SetupInstall()

begin

   Enable( CORECOMPONENTHANDLING );

   bInstallAborted = FALSE;

   // Create list of end user selections to be displayed by DialogShowSdStartCopy() //

   if (bIs32BitSetup) then
      svDir = WINDISK + "\\orant";
   else
      svDir = WINDISK + "\\orant"; // use short names
   endif;

   TARGETDIR = svDir;

   SdProductName( @PRODUCT_NAME );

   Enable( DIALOGCACHE );

  return 0;
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: SetupScreen
//
// Purpose: This function establishes the screen look. This includes
//           colors, fonts, and text to be displayed.
//
///////////////////////////////////////////////////////////////////////////////
function SetupScreen()

begin

   Enable( FULLWINDOWMODE );
   Enable( INDVFILESTATUS );
   SetTitle( @TITLE_MAIN, 24, WHITE );

   SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text.

   Enable( BACKGROUND );

  Delay( 1 );
end;

///////////////////////////////////////////////////////////////////////////////
//
// Function: CheckRequirements
//
// Purpose: This function checks all minimum requirements for the


                                                                                         78
//           application being installed. If any fail, then the user
//           is informed and the setup is terminated.
//
///////////////////////////////////////////////////////////////////////////////
function CheckRequirements()
    NUMBER nvDx, nvDy, nvResult;
    STRING svResult;

begin

   bIsShellExplorer = FALSE;
   bIsWindowsNT4 = FALSE;
   bIsWindowsNT351 = FALSE;
   bIsWindows95 = FALSE;
   bIsWindows98 = FALSE;

   // Check screen resolution.
   GetExtents( nvDx, nvDy );

   if (nvDy < 480) then
      MessageBox( @ERROR_VGARESOLUTION, WARNING );
      abort;
   endif;

   // Set 'setup' operation mode
   bIs32BitSetup = TRUE;
   GetSystemInfo( ISTYPE, nvResult, svResult );
   if (nvResult = 16) then
      bIs32BitSetup = FALSE; // running 16-bit setup
      return 0; // no additional information required
   endif;

   // --- 32-bit testing after this point ---

   // Determine the target system's operating system.
   GetSystemInfo( OS, nvResult, svResult );

   if (nvResult = IS_WINDOWSNT) then
      // Check to see if OS is Windows NT 4.0 or Windows NT 3.51,
      // and if the shell being used is the Explorer shell.
      if (GetSystemInfo( WINMAJOR, nvResult, svResult ) = 0) then
         if (nvResult >= 4) then
            bIsShellExplorer = TRUE;
            bIsWindowsNT4 = TRUE;
         else
           bIsWindowsNT351 = TRUE;
         endif;
      endif;

   elseif (nvResult = IS_WINDOWS9X) then
           MessageBox("This application can only run on Windows 2000", SEVERE);
           abort;
      bIsShellExplorer = TRUE;
      // Check to see if OS is Windows 95 or Windows 98
      GetSystemInfo (WINMINOR, nvResult, svResult);
      if (nvResult < 10) then


                                                                                  79
       bIsWindows95 = TRUE;
     else
       bIsWindows98 = TRUE;
     endif;
   endif;

end;


///////////////////////////////////////////////////////////////////////////////
//
// Function: DialogShowSdWelcome
//
// Purpose: This function handles the standard welcome dialog.
//
//
///////////////////////////////////////////////////////////////////////////////
function DialogShowSdWelcome()
    NUMBER nResult;
    STRING szTitle, szMsg;

begin

   szTitle = "Welcome to the Banner 5.x installer for SMS";
   szMsg = "This package was written specifically to work in the AIS/W2K Pilot test environment.";
   nResult = SdWelcome( szTitle, szMsg );

  return nResult;
end;


///////////////////////////////////////////////////////////////////////////////
//
// Function: DialogShowSdLicense
//
// Purpose: This function displays the license agreement dialog.
//
//
///////////////////////////////////////////////////////////////////////////////
function DialogShowSdLicense()
    NUMBER nResult;
    STRING szTitle, szMsg, szQuestion, szLicenseFile;

begin

   szLicenseFile = SUPPORTDIR ^ "license.txt";
   szTitle = "";
   szMsg    = "";
   szQuestion = "";
   nResult = SdLicense( szTitle, szMsg, szQuestion, szLicenseFile );

  return nResult;
end;


///////////////////////////////////////////////////////////////////////////////


                                                                                                     80
//
// Function: DialogShowSdFinishReboot
//
// Purpose: This function will show the last dialog of the product.
//          It will allow the user to reboot and/or show some readme text.
//
///////////////////////////////////////////////////////////////////////////////
function DialogShowSdFinishReboot()
    NUMBER nResult, nDefOptions;
    STRING szTitle, szMsg1, szMsg2, szOption1, szOption2;
    NUMBER bOpt1, bOpt2;

begin

  if (!BATCH_INSTALL) then
     bOpt1 = FALSE;
     bOpt2 = FALSE;
     szMsg1 = "";
     szMsg2 = "";
     szOption1 = "";
     szOption2 = "";
     nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );
     return 0;
  endif;

  nDefOptions = SYS_BOOTMACHINE;
  szTitle = "";
  szMsg1    = "";
  szMsg2    = "";
  nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 );

  return nResult;
end;

// --- include script file section ---

#include "sddialog.rul"




                                                                                          81
Files Included in Banner 5.x for SMS Package

[Patch7\bin]
file26=C:\orant\Patch7\bin\UTC60.DLL
file15=C:\orant\Patch7\bin\qmg60.dll
file27=C:\orant\Patch7\bin\UTL60.DLL
file16=C:\orant\Patch7\bin\ROS60.DLL
file0=C:\orant\Patch7\bin\DE60.DLL
file28=C:\orant\Patch7\bin\VGS60.DLL
file17=C:\orant\Patch7\bin\SQLLIB80.DLL
file1=C:\orant\Patch7\bin\DEB60.DLL
file29=C:\orant\Patch7\bin\WRAP80.EXE
file18=C:\orant\Patch7\bin\UAT60.DLL
file2=C:\orant\Patch7\bin\ifcom60.DLL
file19=C:\orant\Patch7\bin\UIA60.DLL
file3=C:\orant\Patch7\bin\ifdbg60.EXE
file4=C:\orant\Patch7\bin\ifr60.DLL
file5=C:\orant\Patch7\bin\ifrcm60.DLL
file6=C:\orant\Patch7\bin\ifrd60.DLL
file7=C:\orant\Patch7\bin\ifrun60.EXE
file8=C:\orant\Patch7\bin\NLSRTL33.DLL
file30=C:\orant\Patch7\bin\XA80.DLL
file9=C:\orant\Patch7\bin\NN60.DLL
file31=C:\orant\Patch7\bin\zrc60.dll
file20=C:\orant\Patch7\bin\UICC60.DLL
file21=C:\orant\Patch7\bin\UIDC60.DLL
file10=C:\orant\Patch7\bin\NNB60.DLL
fulldirectory=C:\orant\Patch7\bin
file22=C:\orant\Patch7\bin\UIIM60.DLL
file11=C:\orant\Patch7\bin\ORA805.DLL
file23=C:\orant\Patch7\bin\UIOLE60.DLL
file12=C:\orant\Patch7\bin\PCL80.DLL
file24=C:\orant\Patch7\bin\UIREM60.DLL
file13=C:\orant\Patch7\bin\PLS805.DLL
file25=C:\orant\Patch7\bin\UIW60.DLL
file14=C:\orant\Patch7\bin\PSTD805.DLL

[NLSRTL33\DATA]
file409=C:\orant\NLSRTL33\DATA\LX30034.NLB
file392=C:\orant\NLSRTL33\DATA\LX30023.NLB
file381=C:\orant\NLSRTL33\DATA\LX30018.NLB
file370=C:\orant\NLSRTL33\DATA\LX3000D.NLB
file293=C:\orant\NLSRTL33\DATA\LX201FB.NLB
file282=C:\orant\NLSRTL33\DATA\LX2017E.NLB
file271=C:\orant\NLSRTL33\DATA\lx2013f.nlb
file260=C:\orant\NLSRTL33\DATA\LX2010A.NLB
file194=C:\orant\NLSRTL33\DATA\LX2009F.NLB
file183=C:\orant\NLSRTL33\DATA\LX2006E.NLB
file172=C:\orant\NLSRTL33\DATA\LX20052.NLB
file161=C:\orant\NLSRTL33\DATA\LX20029.NLB
file150=C:\orant\NLSRTL33\DATA\lx2001c.nlb
file59=C:\orant\NLSRTL33\DATA\LX1000C.NLB
file48=C:\orant\NLSRTL33\DATA\LX10001.NLB
file37=C:\orant\NLSRTL33\DATA\LX00026.NLB
file26=C:\orant\NLSRTL33\DATA\LX0001B.NLB
file15=C:\orant\NLSRTL33\DATA\LX00010.NLB


                                               82
file393=C:\orant\NLSRTL33\DATA\LX30024.NLB
file382=C:\orant\NLSRTL33\DATA\LX30019.NLB
file371=C:\orant\NLSRTL33\DATA\LX3000E.NLB
file360=C:\orant\NLSRTL33\DATA\LX30003.NLB
file294=C:\orant\NLSRTL33\DATA\LX201FC.NLB
file283=C:\orant\NLSRTL33\DATA\LX2017F.NLB
file272=C:\orant\NLSRTL33\DATA\lx20140.nlb
file261=C:\orant\NLSRTL33\DATA\LX2010B.NLB
file250=C:\orant\NLSRTL33\DATA\LX200E7.NLB
file195=C:\orant\NLSRTL33\DATA\LX200A0.NLB
file184=C:\orant\NLSRTL33\DATA\LX20071.NLB
file173=C:\orant\NLSRTL33\DATA\LX2005A.NLB
file162=C:\orant\NLSRTL33\DATA\LX2002A.NLB
file151=C:\orant\NLSRTL33\DATA\LX2001F.NLB
file140=C:\orant\NLSRTL33\DATA\LX20010.NLB
file49=C:\orant\NLSRTL33\DATA\LX10002.NLB
file38=C:\orant\NLSRTL33\DATA\LX00027.NLB
file27=C:\orant\NLSRTL33\DATA\LX0001C.NLB
file16=C:\orant\NLSRTL33\DATA\LX00011.NLB
file0=C:\orant\NLSRTL33\DATA\LX00001.NLB
file394=C:\orant\NLSRTL33\DATA\LX30025.NLB
file383=C:\orant\NLSRTL33\DATA\LX3001A.NLB
file372=C:\orant\NLSRTL33\DATA\LX3000F.NLB
file361=C:\orant\NLSRTL33\DATA\LX30004.NLB
file350=C:\orant\NLSRTL33\DATA\lx2073a.nlb
file295=C:\orant\NLSRTL33\DATA\LX201FD.NLB
file284=C:\orant\NLSRTL33\DATA\LX20180.NLB
file273=C:\orant\NLSRTL33\DATA\lx20141.nlb
file262=C:\orant\NLSRTL33\DATA\LX20115.NLB
file251=C:\orant\NLSRTL33\DATA\LX200EB.NLB
file240=C:\orant\NLSRTL33\DATA\LX200CF.NLB
file196=C:\orant\NLSRTL33\DATA\LX200A1.NLB
file185=C:\orant\NLSRTL33\DATA\LX20072.NLB
file174=C:\orant\NLSRTL33\DATA\LX2005B.NLB
file163=C:\orant\NLSRTL33\DATA\LX2002B.NLB
file152=C:\orant\NLSRTL33\DATA\LX20020.NLB
file141=C:\orant\NLSRTL33\DATA\LX20011.NLB
file130=C:\orant\NLSRTL33\DATA\LX20006.NLB
file39=C:\orant\NLSRTL33\DATA\LX00028.NLB
file28=C:\orant\NLSRTL33\DATA\LX0001D.NLB
file17=C:\orant\NLSRTL33\DATA\LX00012.NLB
file1=C:\orant\NLSRTL33\DATA\LX00002.NLB
file395=C:\orant\NLSRTL33\DATA\LX30026.NLB
file384=C:\orant\NLSRTL33\DATA\LX3001B.NLB
file373=C:\orant\NLSRTL33\DATA\LX30010.NLB
file362=C:\orant\NLSRTL33\DATA\LX30005.NLB
file351=C:\orant\NLSRTL33\DATA\lx2073c.nlb
file340=C:\orant\NLSRTL33\DATA\lx203e3.nlb
file296=C:\orant\NLSRTL33\DATA\LX201FF.NLB
file285=C:\orant\NLSRTL33\DATA\LX20181.NLB
file274=C:\orant\NLSRTL33\DATA\lx20142.nlb
file263=C:\orant\NLSRTL33\DATA\LX20116.NLB
file252=C:\orant\NLSRTL33\DATA\LX200EF.NLB
file241=C:\orant\NLSRTL33\DATA\lx200d0.nlb
file230=C:\orant\NLSRTL33\DATA\LX200C5.NLB
file197=C:\orant\NLSRTL33\DATA\LX200A2.NLB


                                             83
file186=C:\orant\NLSRTL33\DATA\LX2008C.NLB
file175=C:\orant\NLSRTL33\DATA\LX2005C.NLB
file164=C:\orant\NLSRTL33\DATA\LX2002C.NLB
file153=C:\orant\NLSRTL33\DATA\LX20021.NLB
file142=C:\orant\NLSRTL33\DATA\LX20012.NLB
file131=C:\orant\NLSRTL33\DATA\lx20007.nlb
file120=C:\orant\NLSRTL33\DATA\lx1004a.nlb
file29=C:\orant\NLSRTL33\DATA\LX0001E.NLB
file18=C:\orant\NLSRTL33\DATA\LX00013.NLB
file2=C:\orant\NLSRTL33\DATA\LX00003.NLB
file440=C:\orant\NLSRTL33\DATA\lx60363.nlb
file396=C:\orant\NLSRTL33\DATA\LX30027.NLB
file385=C:\orant\NLSRTL33\DATA\LX3001C.NLB
file374=C:\orant\NLSRTL33\DATA\LX30011.NLB
file363=C:\orant\NLSRTL33\DATA\LX30006.NLB
file352=C:\orant\NLSRTL33\DATA\lx2073d.nlb
file341=C:\orant\NLSRTL33\DATA\LX203E4.NLB
file330=C:\orant\NLSRTL33\DATA\LX2035D.NLB
file297=C:\orant\NLSRTL33\DATA\LX20202.NLB
file286=C:\orant\NLSRTL33\DATA\LX20182.NLB
file275=C:\orant\NLSRTL33\DATA\LX2015F.NLB
file264=C:\orant\NLSRTL33\DATA\LX20117.NLB
file253=C:\orant\NLSRTL33\DATA\LX200F1.NLB
file242=C:\orant\NLSRTL33\DATA\LX200D2.NLB
file231=C:\orant\NLSRTL33\DATA\lx200c6.nlb
file220=C:\orant\NLSRTL33\DATA\LX200BB.NLB
file198=C:\orant\NLSRTL33\DATA\LX200A3.NLB
file187=C:\orant\NLSRTL33\DATA\LX20096.NLB
file176=C:\orant\NLSRTL33\DATA\LX2005D.NLB
file165=C:\orant\NLSRTL33\DATA\lx2002d.nlb
file154=C:\orant\NLSRTL33\DATA\LX20022.NLB
file143=C:\orant\NLSRTL33\DATA\LX20013.NLB
file132=C:\orant\NLSRTL33\DATA\LX20008.NLB
file121=C:\orant\NLSRTL33\DATA\lx1004b.nlb
file110=C:\orant\NLSRTL33\DATA\LX1003F.NLB
file90=C:\orant\NLSRTL33\DATA\LX1002B.NLB
file19=C:\orant\NLSRTL33\DATA\LX00014.NLB
file3=C:\orant\NLSRTL33\DATA\LX00004.NLB
file441=C:\orant\NLSRTL33\DATA\LX60366.NLB
file430=C:\orant\NLSRTL33\DATA\LX6034A.NLB
file397=C:\orant\NLSRTL33\DATA\LX30028.NLB
file386=C:\orant\NLSRTL33\DATA\LX3001D.NLB
file375=C:\orant\NLSRTL33\DATA\LX30012.NLB
file364=C:\orant\NLSRTL33\DATA\LX30007.NLB
file353=C:\orant\NLSRTL33\DATA\lx20744.nlb
file342=C:\orant\NLSRTL33\DATA\LX203E5.NLB
file331=C:\orant\NLSRTL33\DATA\LX2035E.NLB
file320=C:\orant\NLSRTL33\DATA\LX20344.NLB
file298=C:\orant\NLSRTL33\DATA\LX2022A.NLB
file287=C:\orant\NLSRTL33\DATA\LX20186.NLB
file276=C:\orant\NLSRTL33\DATA\LX20160.NLB
file265=C:\orant\NLSRTL33\DATA\lx20137.nlb
file254=C:\orant\NLSRTL33\DATA\LX200FB.NLB
file243=C:\orant\NLSRTL33\DATA\LX200D3.NLB
file232=C:\orant\NLSRTL33\DATA\lx200c7.nlb
file221=C:\orant\NLSRTL33\DATA\LX200BC.NLB


                                             84
file210=C:\orant\NLSRTL33\DATA\LX200B1.NLB
file199=C:\orant\NLSRTL33\DATA\LX200A4.NLB
file188=C:\orant\NLSRTL33\DATA\LX20098.NLB
file177=C:\orant\NLSRTL33\DATA\LX2005E.NLB
file166=C:\orant\NLSRTL33\DATA\lx2002e.nlb
file155=C:\orant\NLSRTL33\DATA\LX20023.NLB
file144=C:\orant\NLSRTL33\DATA\LX20014.NLB
file133=C:\orant\NLSRTL33\DATA\lx20009.nlb
file122=C:\orant\NLSRTL33\DATA\lx1004c.nlb
file111=C:\orant\NLSRTL33\DATA\LX10040.NLB
file100=C:\orant\NLSRTL33\DATA\LX10035.NLB
file91=C:\orant\NLSRTL33\DATA\LX1002C.NLB
file80=C:\orant\NLSRTL33\DATA\LX10021.NLB
file4=C:\orant\NLSRTL33\DATA\LX00005.NLB
file442=C:\orant\NLSRTL33\DATA\LX603E4.NLB
file431=C:\orant\NLSRTL33\DATA\LX6034D.NLB
file420=C:\orant\NLSRTL33\DATA\LX3003F.NLB
file398=C:\orant\NLSRTL33\DATA\LX30029.NLB
file387=C:\orant\NLSRTL33\DATA\LX3001E.NLB
file376=C:\orant\NLSRTL33\DATA\LX30013.NLB
file365=C:\orant\NLSRTL33\DATA\LX30008.NLB
file354=C:\orant\NLSRTL33\DATA\LX20747.NLB
file343=C:\orant\NLSRTL33\DATA\LX203E6.NLB
file332=C:\orant\NLSRTL33\DATA\LX2035F.NLB
file321=C:\orant\NLSRTL33\DATA\LX20348.NLB
file310=C:\orant\NLSRTL33\DATA\LX2024E.NLB
file299=C:\orant\NLSRTL33\DATA\LX2022B.NLB
file288=C:\orant\NLSRTL33\DATA\LX20191.NLB
file277=C:\orant\NLSRTL33\DATA\LX20161.NLB
file266=C:\orant\NLSRTL33\DATA\lx20138.nlb
file255=C:\orant\NLSRTL33\DATA\LX20105.NLB
file244=C:\orant\NLSRTL33\DATA\LX200DD.NLB
file233=C:\orant\NLSRTL33\DATA\lx200c8.nlb
file222=C:\orant\NLSRTL33\DATA\lx200bd.nlb
file211=C:\orant\NLSRTL33\DATA\LX200B2.NLB
file200=C:\orant\NLSRTL33\DATA\LX200A5.NLB
file189=C:\orant\NLSRTL33\DATA\LX20099.NLB
file178=C:\orant\NLSRTL33\DATA\LX2005F.NLB
file167=C:\orant\NLSRTL33\DATA\LX20032.NLB
file156=C:\orant\NLSRTL33\DATA\LX20024.NLB
file145=C:\orant\NLSRTL33\DATA\LX20015.NLB
file134=C:\orant\NLSRTL33\DATA\LX2000A.NLB
file123=C:\orant\NLSRTL33\DATA\lx1004d.nlb
file112=C:\orant\NLSRTL33\DATA\LX10041.NLB
file101=C:\orant\NLSRTL33\DATA\LX10036.NLB
file92=C:\orant\NLSRTL33\DATA\LX1002D.NLB
file81=C:\orant\NLSRTL33\DATA\LX10022.NLB
file70=C:\orant\NLSRTL33\DATA\LX10017.NLB
file5=C:\orant\NLSRTL33\DATA\LX00006.NLB
file443=C:\orant\NLSRTL33\DATA\LX60732.NLB
file432=C:\orant\NLSRTL33\DATA\lx6034e.nlb
file421=C:\orant\NLSRTL33\DATA\LX30040.NLB
file410=C:\orant\NLSRTL33\DATA\LX30035.NLB
file399=C:\orant\NLSRTL33\DATA\LX3002A.NLB
file388=C:\orant\NLSRTL33\DATA\LX3001F.NLB
file377=C:\orant\NLSRTL33\DATA\LX30014.NLB


                                             85
file366=C:\orant\NLSRTL33\DATA\LX30009.NLB
file355=C:\orant\NLSRTL33\DATA\lx20748.nlb
file344=C:\orant\NLSRTL33\DATA\LX203E9.NLB
file333=C:\orant\NLSRTL33\DATA\LX20360.NLB
file322=C:\orant\NLSRTL33\DATA\LX2034A.NLB
file311=C:\orant\NLSRTL33\DATA\LX2031D.NLB
file300=C:\orant\NLSRTL33\DATA\LX2022C.NLB
file289=C:\orant\NLSRTL33\DATA\LX201F4.NLB
file278=C:\orant\NLSRTL33\DATA\LX20162.NLB
file267=C:\orant\NLSRTL33\DATA\lx2013a.nlb
file256=C:\orant\NLSRTL33\DATA\LX20106.NLB
file245=C:\orant\NLSRTL33\DATA\LX200DE.NLB
file234=C:\orant\NLSRTL33\DATA\LX200C9.NLB
file223=C:\orant\NLSRTL33\DATA\LX200BE.NLB
file212=C:\orant\NLSRTL33\DATA\LX200B3.NLB
file201=C:\orant\NLSRTL33\DATA\LX200A6.NLB
file179=C:\orant\NLSRTL33\DATA\LX20060.NLB
file168=C:\orant\NLSRTL33\DATA\LX2003D.NLB
file157=C:\orant\NLSRTL33\DATA\LX20025.NLB
file146=C:\orant\NLSRTL33\DATA\LX20016.NLB
file135=C:\orant\NLSRTL33\DATA\LX2000B.NLB
file124=C:\orant\NLSRTL33\DATA\LX1BOOT.NLB
file113=C:\orant\NLSRTL33\DATA\LX10043.NLB
file102=C:\orant\NLSRTL33\DATA\LX10037.NLB
file93=C:\orant\NLSRTL33\DATA\LX1002E.NLB
file82=C:\orant\NLSRTL33\DATA\LX10023.NLB
file71=C:\orant\NLSRTL33\DATA\LX10018.NLB
file60=C:\orant\NLSRTL33\DATA\LX1000D.NLB
file6=C:\orant\NLSRTL33\DATA\LX00007.NLB
file444=C:\orant\NLSRTL33\DATA\lx6073c.nlb
file433=C:\orant\NLSRTL33\DATA\LX60354.NLB
file422=C:\orant\NLSRTL33\DATA\LX30041.NLB
file411=C:\orant\NLSRTL33\DATA\LX30036.NLB
file400=C:\orant\NLSRTL33\DATA\LX3002B.NLB
file389=C:\orant\NLSRTL33\DATA\LX30020.NLB
file378=C:\orant\NLSRTL33\DATA\LX30015.NLB
file367=C:\orant\NLSRTL33\DATA\LX3000A.NLB
file356=C:\orant\NLSRTL33\DATA\lx20749.nlb
file345=C:\orant\NLSRTL33\DATA\LX20726.NLB
file334=C:\orant\NLSRTL33\DATA\LX20361.NLB
file323=C:\orant\NLSRTL33\DATA\LX2034D.NLB
file312=C:\orant\NLSRTL33\DATA\lx2031e.nlb
file301=C:\orant\NLSRTL33\DATA\LX2022D.NLB
file279=C:\orant\NLSRTL33\DATA\LX20170.NLB
file268=C:\orant\NLSRTL33\DATA\lx2013b.nlb
file257=C:\orant\NLSRTL33\DATA\LX20107.NLB
file246=C:\orant\NLSRTL33\DATA\LX200DF.NLB
file235=C:\orant\NLSRTL33\DATA\LX200CA.NLB
file224=C:\orant\NLSRTL33\DATA\LX200BF.NLB
file213=C:\orant\NLSRTL33\DATA\LX200B4.NLB
file202=C:\orant\NLSRTL33\DATA\LX200A7.NLB
file169=C:\orant\NLSRTL33\DATA\LX20046.NLB
file158=C:\orant\NLSRTL33\DATA\LX20026.NLB
file147=C:\orant\NLSRTL33\DATA\LX20017.NLB
file136=C:\orant\NLSRTL33\DATA\LX2000C.NLB
file125=C:\orant\NLSRTL33\DATA\LX20001.NLB


                                             86
file114=C:\orant\NLSRTL33\DATA\LX10044.NLB
file103=C:\orant\NLSRTL33\DATA\LX10038.NLB
file94=C:\orant\NLSRTL33\DATA\LX1002F.NLB
file83=C:\orant\NLSRTL33\DATA\LX10024.NLB
file72=C:\orant\NLSRTL33\DATA\LX10019.NLB
file61=C:\orant\NLSRTL33\DATA\LX1000E.NLB
file50=C:\orant\NLSRTL33\DATA\LX10003.NLB
file7=C:\orant\NLSRTL33\DATA\LX00008.NLB
file445=C:\orant\NLSRTL33\DATA\LX60747.NLB
file434=C:\orant\NLSRTL33\DATA\LX6035C.NLB
file423=C:\orant\NLSRTL33\DATA\lx30043.nlb
file412=C:\orant\NLSRTL33\DATA\LX30037.NLB
file401=C:\orant\NLSRTL33\DATA\LX3002C.NLB
file379=C:\orant\NLSRTL33\DATA\LX30016.NLB
file368=C:\orant\NLSRTL33\DATA\LX3000B.NLB
file357=C:\orant\NLSRTL33\DATA\LX22711.NLB
file346=C:\orant\NLSRTL33\DATA\LX20728.NLB
file335=C:\orant\NLSRTL33\DATA\LX20362.NLB
file324=C:\orant\NLSRTL33\DATA\lx2034e.nlb
file313=C:\orant\NLSRTL33\DATA\LX2033D.NLB
file302=C:\orant\NLSRTL33\DATA\LX2022E.NLB
file269=C:\orant\NLSRTL33\DATA\lx2013c.nlb
file258=C:\orant\NLSRTL33\DATA\LX20108.NLB
file247=C:\orant\NLSRTL33\DATA\LX200E0.NLB
file236=C:\orant\NLSRTL33\DATA\LX200CB.NLB
file225=C:\orant\NLSRTL33\DATA\LX200C0.NLB
file214=C:\orant\NLSRTL33\DATA\LX200B5.NLB
file203=C:\orant\NLSRTL33\DATA\LX200AA.NLB
file159=C:\orant\NLSRTL33\DATA\LX20027.NLB
file148=C:\orant\NLSRTL33\DATA\LX20019.NLB
file137=C:\orant\NLSRTL33\DATA\LX2000D.NLB
file126=C:\orant\NLSRTL33\DATA\LX20002.NLB
file115=C:\orant\NLSRTL33\DATA\lx10045.nlb
file104=C:\orant\NLSRTL33\DATA\LX10039.NLB
file95=C:\orant\NLSRTL33\DATA\LX10030.NLB
file84=C:\orant\NLSRTL33\DATA\LX10025.NLB
file73=C:\orant\NLSRTL33\DATA\LX1001A.NLB
file62=C:\orant\NLSRTL33\DATA\LX1000F.NLB
file51=C:\orant\NLSRTL33\DATA\LX10004.NLB
file40=C:\orant\NLSRTL33\DATA\LX00029.NLB
file8=C:\orant\NLSRTL33\DATA\LX00009.NLB
file446=C:\orant\NLSRTL33\DATA\lx60748.nlb
file435=C:\orant\NLSRTL33\DATA\LX6035D.NLB
file424=C:\orant\NLSRTL33\DATA\LX5034A.NLB
file413=C:\orant\NLSRTL33\DATA\LX30038.NLB
file402=C:\orant\NLSRTL33\DATA\LX3002D.NLB
file369=C:\orant\NLSRTL33\DATA\LX3000C.NLB
file358=C:\orant\NLSRTL33\DATA\LX30001.NLB
file347=C:\orant\NLSRTL33\DATA\LX20729.NLB
file336=C:\orant\NLSRTL33\DATA\lx20363.nlb
file325=C:\orant\NLSRTL33\DATA\LX20352.NLB
file314=C:\orant\NLSRTL33\DATA\LX2033E.NLB
file303=C:\orant\NLSRTL33\DATA\LX2022F.NLB
file259=C:\orant\NLSRTL33\DATA\LX20109.NLB
file248=C:\orant\NLSRTL33\DATA\LX200E1.NLB
file237=C:\orant\NLSRTL33\DATA\LX200CC.NLB


                                             87
file226=C:\orant\NLSRTL33\DATA\LX200C1.NLB
file215=C:\orant\NLSRTL33\DATA\LX200B6.NLB
file204=C:\orant\NLSRTL33\DATA\LX200AB.NLB
file149=C:\orant\NLSRTL33\DATA\lx2001b.nlb
file138=C:\orant\NLSRTL33\DATA\LX2000E.NLB
file127=C:\orant\NLSRTL33\DATA\LX20003.NLB
file116=C:\orant\NLSRTL33\DATA\lx10046.nlb
file105=C:\orant\NLSRTL33\DATA\LX1003A.NLB
file96=C:\orant\NLSRTL33\DATA\LX10031.NLB
file85=C:\orant\NLSRTL33\DATA\LX10026.NLB
file74=C:\orant\NLSRTL33\DATA\LX1001B.NLB
file63=C:\orant\NLSRTL33\DATA\LX10010.NLB
file52=C:\orant\NLSRTL33\DATA\LX10005.NLB
file41=C:\orant\NLSRTL33\DATA\LX0002A.NLB
file30=C:\orant\NLSRTL33\DATA\LX0001F.NLB
file9=C:\orant\NLSRTL33\DATA\LX0000A.NLB
file447=C:\orant\NLSRTL33\DATA\lx60749.nlb
file436=C:\orant\NLSRTL33\DATA\LX6035F.NLB
file425=C:\orant\NLSRTL33\DATA\LX50366.NLB
file414=C:\orant\NLSRTL33\DATA\LX30039.NLB
file403=C:\orant\NLSRTL33\DATA\LX3002E.NLB
file359=C:\orant\NLSRTL33\DATA\LX30002.NLB
file348=C:\orant\NLSRTL33\DATA\LX20730.NLB
file337=C:\orant\NLSRTL33\DATA\LX20366.NLB
file326=C:\orant\NLSRTL33\DATA\LX20353.NLB
file315=C:\orant\NLSRTL33\DATA\LX2033F.NLB
file304=C:\orant\NLSRTL33\DATA\LX20230.NLB
file249=C:\orant\NLSRTL33\DATA\LX200E2.NLB
file238=C:\orant\NLSRTL33\DATA\LX200CD.NLB
file227=C:\orant\NLSRTL33\DATA\LX200C2.NLB
file216=C:\orant\NLSRTL33\DATA\LX200B7.NLB
file205=C:\orant\NLSRTL33\DATA\LX200AC.NLB
file139=C:\orant\NLSRTL33\DATA\LX2000F.NLB
file128=C:\orant\NLSRTL33\DATA\LX20004.NLB
file117=C:\orant\NLSRTL33\DATA\lx10047.nlb
file106=C:\orant\NLSRTL33\DATA\LX1003B.NLB
file97=C:\orant\NLSRTL33\DATA\LX10032.NLB
file86=C:\orant\NLSRTL33\DATA\LX10027.NLB
file75=C:\orant\NLSRTL33\DATA\LX1001C.NLB
file64=C:\orant\NLSRTL33\DATA\LX10011.NLB
file53=C:\orant\NLSRTL33\DATA\LX10006.NLB
file42=C:\orant\NLSRTL33\DATA\LX0002B.NLB
file31=C:\orant\NLSRTL33\DATA\LX00020.NLB
file20=C:\orant\NLSRTL33\DATA\LX00015.NLB
file437=C:\orant\NLSRTL33\DATA\LX60360.NLB
file426=C:\orant\NLSRTL33\DATA\LX503E4.NLB
file415=C:\orant\NLSRTL33\DATA\LX3003A.NLB
file404=C:\orant\NLSRTL33\DATA\LX3002F.NLB
file349=C:\orant\NLSRTL33\DATA\LX20732.NLB
file338=C:\orant\NLSRTL33\DATA\LX20367.NLB
file327=C:\orant\NLSRTL33\DATA\LX20354.NLB
file316=C:\orant\NLSRTL33\DATA\LX20340.NLB
file305=C:\orant\NLSRTL33\DATA\LX20231.NLB
file239=C:\orant\NLSRTL33\DATA\LX200CE.NLB
file228=C:\orant\NLSRTL33\DATA\LX200C3.NLB
file217=C:\orant\NLSRTL33\DATA\LX200B8.NLB


                                             88
file206=C:\orant\NLSRTL33\DATA\LX200AD.NLB
file129=C:\orant\NLSRTL33\DATA\LX20005.NLB
file118=C:\orant\NLSRTL33\DATA\lx10048.nlb
file107=C:\orant\NLSRTL33\DATA\LX1003C.NLB
file98=C:\orant\NLSRTL33\DATA\LX10033.NLB
file87=C:\orant\NLSRTL33\DATA\LX10028.NLB
file76=C:\orant\NLSRTL33\DATA\LX1001D.NLB
file65=C:\orant\NLSRTL33\DATA\LX10012.NLB
file54=C:\orant\NLSRTL33\DATA\LX10007.NLB
file43=C:\orant\NLSRTL33\DATA\LX0002C.NLB
file32=C:\orant\NLSRTL33\DATA\LX00021.NLB
file21=C:\orant\NLSRTL33\DATA\LX00016.NLB
file10=C:\orant\NLSRTL33\DATA\LX0000B.NLB
fulldirectory=C:\orant\NLSRTL33\DATA
file438=C:\orant\NLSRTL33\DATA\LX60361.NLB
file427=C:\orant\NLSRTL33\DATA\lx50732.nlb
file416=C:\orant\NLSRTL33\DATA\LX3003B.NLB
file405=C:\orant\NLSRTL33\DATA\LX30030.NLB
file339=C:\orant\NLSRTL33\DATA\lx203e2.nlb
file328=C:\orant\NLSRTL33\DATA\LX20355.NLB
file317=C:\orant\NLSRTL33\DATA\LX20341.NLB
file306=C:\orant\NLSRTL33\DATA\LX20233.NLB
file229=C:\orant\NLSRTL33\DATA\LX200C4.NLB
file218=C:\orant\NLSRTL33\DATA\LX200B9.NLB
file207=C:\orant\NLSRTL33\DATA\LX200AE.NLB
file190=C:\orant\NLSRTL33\DATA\LX2009A.NLB
file119=C:\orant\NLSRTL33\DATA\lx10049.nlb
file108=C:\orant\NLSRTL33\DATA\LX1003D.NLB
file99=C:\orant\NLSRTL33\DATA\LX10034.NLB
file88=C:\orant\NLSRTL33\DATA\LX10029.NLB
file77=C:\orant\NLSRTL33\DATA\LX1001E.NLB
file66=C:\orant\NLSRTL33\DATA\LX10013.NLB
file55=C:\orant\NLSRTL33\DATA\LX10008.NLB
file44=C:\orant\NLSRTL33\DATA\LX0002D.NLB
file33=C:\orant\NLSRTL33\DATA\LX00022.NLB
file22=C:\orant\NLSRTL33\DATA\LX00017.NLB
file11=C:\orant\NLSRTL33\DATA\LX0000C.NLB
file439=C:\orant\NLSRTL33\DATA\LX60362.NLB
file428=C:\orant\NLSRTL33\DATA\LX6033E.NLB
file417=C:\orant\NLSRTL33\DATA\LX3003C.NLB
file406=C:\orant\NLSRTL33\DATA\LX30031.NLB
file329=C:\orant\NLSRTL33\DATA\LX2035C.NLB
file318=C:\orant\NLSRTL33\DATA\LX20342.NLB
file307=C:\orant\NLSRTL33\DATA\LX20235.NLB
file290=C:\orant\NLSRTL33\DATA\LX201F8.NLB
file219=C:\orant\NLSRTL33\DATA\LX200BA.NLB
file208=C:\orant\NLSRTL33\DATA\LX200AF.NLB
file191=C:\orant\NLSRTL33\DATA\LX2009B.NLB
file180=C:\orant\NLSRTL33\DATA\lx20061.nlb
file109=C:\orant\NLSRTL33\DATA\LX1003E.NLB
file89=C:\orant\NLSRTL33\DATA\LX1002A.NLB
file78=C:\orant\NLSRTL33\DATA\LX1001F.NLB
file67=C:\orant\NLSRTL33\DATA\LX10014.NLB
file56=C:\orant\NLSRTL33\DATA\LX10009.NLB
file45=C:\orant\NLSRTL33\DATA\LX0002E.NLB
file34=C:\orant\NLSRTL33\DATA\LX00023.NLB


                                             89
file23=C:\orant\NLSRTL33\DATA\LX00018.NLB
file12=C:\orant\NLSRTL33\DATA\LX0000D.NLB
file429=C:\orant\NLSRTL33\DATA\LX6033F.NLB
file418=C:\orant\NLSRTL33\DATA\LX3003D.NLB
file407=C:\orant\NLSRTL33\DATA\LX30032.NLB
file390=C:\orant\NLSRTL33\DATA\LX30021.NLB
file319=C:\orant\NLSRTL33\DATA\LX20343.NLB
file308=C:\orant\NLSRTL33\DATA\LX20236.NLB
file291=C:\orant\NLSRTL33\DATA\LX201F9.NLB
file280=C:\orant\NLSRTL33\DATA\LX2017C.NLB
file209=C:\orant\NLSRTL33\DATA\LX200B0.NLB
file192=C:\orant\NLSRTL33\DATA\LX2009C.NLB
file181=C:\orant\NLSRTL33\DATA\lx20062.nlb
file170=C:\orant\NLSRTL33\DATA\LX20048.NLB
file79=C:\orant\NLSRTL33\DATA\LX10020.NLB
file68=C:\orant\NLSRTL33\DATA\LX10015.NLB
file57=C:\orant\NLSRTL33\DATA\LX1000A.NLB
file46=C:\orant\NLSRTL33\DATA\lx00030.nlb
file35=C:\orant\NLSRTL33\DATA\LX00024.NLB
file24=C:\orant\NLSRTL33\DATA\LX00019.NLB
file13=C:\orant\NLSRTL33\DATA\LX0000E.NLB
file419=C:\orant\NLSRTL33\DATA\LX3003E.NLB
file408=C:\orant\NLSRTL33\DATA\LX30033.NLB
file391=C:\orant\NLSRTL33\DATA\LX30022.NLB
file380=C:\orant\NLSRTL33\DATA\LX30017.NLB
file309=C:\orant\NLSRTL33\DATA\LX20237.NLB
file292=C:\orant\NLSRTL33\DATA\LX201FA.NLB
file281=C:\orant\NLSRTL33\DATA\LX2017D.NLB
file270=C:\orant\NLSRTL33\DATA\lx2013d.nlb
file193=C:\orant\NLSRTL33\DATA\LX2009E.NLB
file182=C:\orant\NLSRTL33\DATA\lx20063.nlb
file171=C:\orant\NLSRTL33\DATA\LX20051.NLB
file160=C:\orant\NLSRTL33\DATA\LX20028.NLB
file69=C:\orant\NLSRTL33\DATA\LX10016.NLB
file58=C:\orant\NLSRTL33\DATA\LX1000B.NLB
file47=C:\orant\NLSRTL33\DATA\LX0BOOT.NLB
file36=C:\orant\NLSRTL33\DATA\LX00025.NLB
file25=C:\orant\NLSRTL33\DATA\LX0001A.NLB
file14=C:\orant\NLSRTL33\DATA\LX0000F.NLB

[NET80]
file15=C:\orant\NET80\NZUS.MSB
file16=C:\orant\NET80\SNLUS.MSB
file0=C:\orant\NET80\NAUKUS.MSB
file17=C:\orant\NET80\TNLUS.MSB
file1=C:\orant\NET80\NCRUS.MSB
file18=C:\orant\NET80\TNPLUS.MSB
file2=C:\orant\NET80\NCXUS.MSB
file19=C:\orant\NET80\TNSUS.MSB
file3=C:\orant\NET80\NIQUS.MSB
file4=C:\orant\NET80\NLTUS.MSB
file5=C:\orant\NET80\NLUS.MSB
file6=C:\orant\NET80\NMPUS.MSB
file7=C:\orant\NET80\NMRUS.MSB
SubDir0=NET80\ADMIN
file8=C:\orant\NET80\NMSUS.MSB


                                             90
SubDir1=NET80\DOCS
file9=C:\orant\NET80\NNCUS.MSB
SubDir2=NET80\ERROR
file20=C:\orant\NET80\TNSUS.MSG
SubDir3=NET80\LOG
file10=C:\orant\NET80\NNFUS.MSB
fulldirectory=C:\orant\NET80
SubDir4=NET80\NAMES
file11=C:\orant\NET80\NNLUS.MSB
SubDir5=NET80\TRACE
file12=C:\orant\NET80\NNOUS.MSB
file13=C:\orant\NET80\NPLUS.MSB
file14=C:\orant\NET80\NZEUS.MSB

[DBS]
file26=C:\orant\DBS\EPCUS.MSB
file15=C:\orant\DBS\EPCN.MSB
file27=C:\orant\DBS\EPCZHS.MSB
file16=C:\orant\DBS\EPCNL.MSB
file0=C:\orant\DBS\DEMOBLD.SQL
file28=C:\orant\DBS\EPCZHT.MSB
file17=C:\orant\DBS\EPCPL.MSB
file1=C:\orant\DBS\DEMODROP.SQL
file29=C:\orant\DBS\PUPBLD.SQL
file18=C:\orant\DBS\EPCPT.MSB
file2=C:\orant\DBS\EPCCA.MSB
file19=C:\orant\DBS\EPCPTB.MSB
file3=C:\orant\DBS\EPCCS.MSB
file4=C:\orant\DBS\EPCD.MSB
file5=C:\orant\DBS\EPCDK.MSB
file6=C:\orant\DBS\EPCE.MSB
file7=C:\orant\DBS\EPCEL.MSB
file8=C:\orant\DBS\EPCESA.MSB
file30=C:\orant\DBS\V7PUP.SQL
file9=C:\orant\DBS\EPCF.MSB
file31=C:\orant\DBS\V8PUP.SQL
file20=C:\orant\DBS\EPCRO.MSB
file21=C:\orant\DBS\EPCRU.MSB
file10=C:\orant\DBS\EPCHU.MSB
fulldirectory=C:\orant\DBS
file22=C:\orant\DBS\EPCS.MSB
file11=C:\orant\DBS\EPCI.MSB
file23=C:\orant\DBS\EPCSF.MSB
file12=C:\orant\DBS\EPCIW.MSB
file24=C:\orant\DBS\EPCSK.MSB
file13=C:\orant\DBS\EPCJA.MSB
file25=C:\orant\DBS\EPCTR.MSB
file14=C:\orant\DBS\EPCKO.MSB

[bin]
file161=C:\orant\bin\XPTSBAR.DLL
file150=C:\orant\bin\XPEDM.DLL
file59=C:\orant\bin\NV60.DLL
file48=C:\orant\bin\NNFG80.DLL
file37=C:\orant\bin\NCR80.DLL
file26=C:\orant\bin\MMS60.DLL


                                   91
file15=C:\orant\bin\ifr60.DLL
file162=C:\orant\bin\XPTSBRES.ENU
file151=C:\orant\bin\XPEH.DLL
file140=C:\orant\bin\XPDATA.dll
file49=C:\orant\bin\NNFN80.DLL
file38=C:\orant\bin\NDWSI80.DLL
file27=C:\orant\bin\MMV60.DLL
file16=C:\orant\bin\ifrcm60.DLL
file0=C:\orant\bin\CA60.DLL
file163=C:\orant\bin\XPXDC.DLL
file152=C:\orant\bin\XPHEAP32.DLL
file141=C:\orant\bin\XPDATA.INI
file130=C:\orant\bin\UIREM60.DLL
file39=C:\orant\bin\NI80.DLL
file28=C:\orant\bin\MMW60.DLL
file17=C:\orant\bin\ifrd60.DLL
file1=C:\orant\bin\CORE40.DLL
file164=C:\orant\bin\XPXDM.DLL
file153=C:\orant\bin\XPINTNAT.DLL
file142=C:\orant\bin\XPDATA.tlb
file131=C:\orant\bin\UIW60.DLL
file120=C:\orant\bin\TNSPING80.EXE
file29=C:\orant\bin\MSVCIRT.dll
file18=C:\orant\bin\ifrun60.EXE
file2=C:\orant\bin\CTL3D32.dll
file165=C:\orant\bin\xru60.dll
file154=C:\orant\bin\XPOBSERV.DLL
file143=C:\orant\bin\XPDATAL.ENU
file132=C:\orant\bin\UTC60.DLL
file121=C:\orant\bin\TRCASST.EXE
file110=C:\orant\bin\RWSXC60.EXE
file90=C:\orant\bin\PLS803.DLL
file19=C:\orant\bin\LXEGEN.EXE
file3=C:\orant\bin\d2kwut60.dll
file166=C:\orant\bin\zrc60.dll
file155=C:\orant\bin\XPOBSRES.ENU
file144=C:\orant\bin\XPDBOBJR.ENU
file133=C:\orant\bin\UTL60.DLL
file122=C:\orant\bin\TRCFMT.CMD
file111=C:\orant\bin\RWSXS60.DLL
file100=C:\orant\bin\RWCON60.EXE
file91=C:\orant\bin\PLS804.DLL
file80=C:\orant\bin\ORA805.DLL
file4=C:\orant\bin\D2SC60.DLL
file156=C:\orant\bin\XPSELECR.ENU
file145=C:\orant\bin\XPDBOBJS.DLL
file134=C:\orant\bin\VGS60.DLL
file123=C:\orant\bin\UAT60.DLL
file112=C:\orant\bin\RWSXU60.EXE
file101=C:\orant\bin\RWCUS60.DLL
file92=C:\orant\bin\PLS805.DLL
file81=C:\orant\bin\oracle.key
file70=C:\orant\bin\OCMAX10.DLL
file5=C:\orant\bin\D2SCV60.EXE
file157=C:\orant\bin\XPSELECT.DLL
file146=C:\orant\bin\XPDDM.DLL


                                     92
file135=C:\orant\bin\WRAP80.EXE
file124=C:\orant\bin\UCOL60.DLL
file113=C:\orant\bin\RWSXU60.OCX
file102=C:\orant\bin\RWISV60.EXE
file93=C:\orant\bin\PSTD803.DLL
file82=C:\orant\bin\ORAPDS32.DLL
file71=C:\orant\bin\OCMAX10U.DLL
file60=C:\orant\bin\NV60.EXE
file6=C:\orant\bin\DE60.DLL
file158=C:\orant\bin\XPSELLNG.ENU
file147=C:\orant\bin\XPDMDATA.DLL
file136=C:\orant\bin\XA80.DLL
file125=C:\orant\bin\UIA60.DLL
file114=C:\orant\bin\RWXTB60.DLL
file103=C:\orant\bin\RWLIB60.DLL
file94=C:\orant\bin\PSTD804.DLL
file83=C:\orant\bin\OSSLOGIN.EXE
file72=C:\orant\bin\OG60.DLL
file61=C:\orant\bin\NVC60.DLL
file50=C:\orant\bin\NNG80.DLL
file7=C:\orant\bin\DEB60.DLL
file159=C:\orant\bin\XPSELSLB.DLL
file148=C:\orant\bin\XPDMRES.ENU
file137=C:\orant\bin\XPBDM.DLL
file126=C:\orant\bin\UICC60.DLL
file115=C:\orant\bin\RWXUS60.DLL
file104=C:\orant\bin\RWQMU60.EXE
file95=C:\orant\bin\PSTD805.DLL
file84=C:\orant\bin\OTRACE80.DLL
file73=C:\orant\bin\OGB60.DLL
file62=C:\orant\bin\NVS60.DLL
file51=C:\orant\bin\NPL80.DLL
file40=C:\orant\bin\NL80.DLL
file8=C:\orant\bin\FNCHK60.EXE
file149=C:\orant\bin\XPDMWRAP.DLL
file138=C:\orant\bin\XPCUBE.DLL
file127=C:\orant\bin\UIDC60.DLL
file116=C:\orant\bin\SDO80.DLL
file105=C:\orant\bin\RWQUS60.DLL
file96=C:\orant\bin\qmg60.dll
file85=C:\orant\bin\OTRCCOL.EXE
file74=C:\orant\bin\OGXTB60.DLL
file63=C:\orant\bin\NZ80.DLL
file52=C:\orant\bin\NR80.DLL
file41=C:\orant\bin\NLSRTL33.DLL
file30=C:\orant\bin\MSVCRT.dll
file9=C:\orant\bin\G30RUN.REG
file139=C:\orant\bin\XPCUBER.ENU
file128=C:\orant\bin\UIIM60.DLL
file117=C:\orant\bin\Shwhnt32.dll
file106=C:\orant\bin\RWRBE60.EXE
file97=C:\orant\bin\REGSVR32.EXE
file86=C:\orant\bin\OTRCCREF.EXE
file75=C:\orant\bin\OLEAUT32.dll
file64=C:\orant\bin\OBE60.EXE
file53=C:\orant\bin\NS80.DLL


                                    93
file42=C:\orant\bin\NMP80.DLL
file31=C:\orant\bin\MSVCRT2X.DLL
file20=C:\orant\bin\LXINST.EXE
file129=C:\orant\bin\UIOLE60.DLL
file118=C:\orant\bin\SNAUM080.DLL
file107=C:\orant\bin\RWRQM60.EXE
file98=C:\orant\bin\ROS60.DLL
file87=C:\orant\bin\OTRCFMT.EXE
file76=C:\orant\bin\OLEPRO32.dll
file65=C:\orant\bin\OBS60.DLL
file54=C:\orant\bin\NT80.DLL
file43=C:\orant\bin\NMS80.DLL
file32=C:\orant\bin\MSVCRT40.dll
file21=C:\orant\bin\MFC40.dll
file10=C:\orant\bin\GE60.DLL
fulldirectory=C:\orant\bin
file119=C:\orant\bin\SQLLIB80.DLL
file108=C:\orant\bin\RWRUN60.EXE
file99=C:\orant\bin\RWCLI60.EXE
file88=C:\orant\bin\OTRCREP.EXE
file77=C:\orant\bin\ONRSD80.EXE
file66=C:\orant\bin\OBX60.DLL
file55=C:\orant\bin\NTN80.DLL
file44=C:\orant\bin\NN60.DLL
file33=C:\orant\bin\NAMESCTL80.EXE
file22=C:\orant\bin\MFC42.dll
file11=C:\orant\bin\GOBAT60.EXE
file109=C:\orant\bin\RWSXA60.OCX
file89=C:\orant\bin\PCL80.DLL
file78=C:\orant\bin\ORA803.DLL
file67=C:\orant\bin\OCI.DLL
file56=C:\orant\bin\NTP80.DLL
file45=C:\orant\bin\NNB60.DLL
file34=C:\orant\bin\NASNS80.DLL
file23=C:\orant\bin\MMA60.DLL
file12=C:\orant\bin\GORUN60.EXE
file79=C:\orant\bin\ORA804.DLL
file68=C:\orant\bin\OCIW32.DLL
file57=C:\orant\bin\NTT80.DLL
file46=C:\orant\bin\NNCI80.DLL
file35=C:\orant\bin\NAUN80.DLL
file24=C:\orant\bin\MMC60.DLL
file13=C:\orant\bin\ifcom60.DLL
file160=C:\orant\bin\XPSELSLR.ENU
file69=C:\orant\bin\OCL60.DLL
file58=C:\orant\bin\NTUS80.DLL
file47=C:\orant\bin\NNFD80.DLL
file36=C:\orant\bin\NAUNTS80.DLL
file25=C:\orant\bin\MMI60.DLL
file14=C:\orant\bin\ifdbg60.EXE

[REPORT60\OCX]
SubDir0=REPORT60\OCX\SAMPLE
fulldirectory=C:\orant\REPORT60\OCX

[PRO80]


                                      94
file0=C:\orant\PRO80\SQLUS.MSB
fulldirectory=C:\orant\PRO80

[NET80\ADMIN]
file0=C:\orant\NET80\ADMIN\TNSNAMES.ORA
SubDir0=NET80\ADMIN\SAMPLE
fulldirectory=C:\orant\NET80\ADMIN

[GRAPH60]
file0=C:\orant\GRAPH60\GCIUS.RES
file1=C:\orant\GRAPH60\GEIUS.RES
file2=C:\orant\GRAPH60\GOIUS.RES
SubDir0=GRAPH60\GWIZ_BMP
SubDir1=GRAPH60\GWIZ_OGD
fulldirectory=C:\orant\GRAPH60

[FORMS60]
file0=C:\orant\FORMS60\FMCUS.MSB
file1=C:\orant\FORMS60\FMDUS.MSB
file2=C:\orant\FORMS60\FMFUS.MSB
file3=C:\orant\FORMS60\FMGUS.MSB
file4=C:\orant\FORMS60\FMLUS.MSB
file5=C:\orant\FORMS60\FMMUS.MSB
file6=C:\orant\FORMS60\FMRUSW.RES
file7=C:\orant\FORMS60\forms.reg
SubDir0=FORMS60\em
SubDir1=FORMS60\log
fulldirectory=C:\orant\FORMS60

[RDBMS80]
file0=C:\orant\RDBMS80\KOPUS.MSB
file1=C:\orant\RDBMS80\LCDUS.MSB
file2=C:\orant\RDBMS80\OCIUS.MSB
file3=C:\orant\RDBMS80\ORAUS.MSB
file4=C:\orant\RDBMS80\SOSDUS.MSB
SubDir0=RDBMS80\ADMIN
fulldirectory=C:\orant\RDBMS80

[Patch7]
SubDir0=Patch7\bin
SubDir1=Patch7\orainst
fulldirectory=C:\orant\Patch7

[REPORT60\OCI]
file0=C:\orant\REPORT60\OCI\RWOCI60.DLL
fulldirectory=C:\orant\REPORT60\OCI

[RDBMS80\ADMIN]
file0=C:\orant\RDBMS80\ADMIN\CORE40.SYM
file1=C:\orant\RDBMS80\ADMIN\NLSRTL33.SYM
file2=C:\orant\RDBMS80\ADMIN\ORA804.SYM
file3=C:\orant\RDBMS80\ADMIN\ORA805.SYM
file4=C:\orant\RDBMS80\ADMIN\PLS804.SYM
file5=C:\orant\RDBMS80\ADMIN\PLS805.SYM
file6=C:\orant\RDBMS80\ADMIN\PSTD804.SYM
file7=C:\orant\RDBMS80\ADMIN\PSTD805.SYM


                                            95
file8=C:\orant\RDBMS80\ADMIN\XA80.SYM
fulldirectory=C:\orant\RDBMS80\ADMIN

[OTRACE80\INCLUDE]
file0=C:\orant\OTRACE80\INCLUDE\EPC.H
fulldirectory=C:\orant\OTRACE80\INCLUDE

[GRAPH60\GWIZ_BMP]
file0=C:\orant\GRAPH60\GWIZ_BMP\BAR0.BMP
file1=C:\orant\GRAPH60\GWIZ_BMP\BLOCK.BMP
file2=C:\orant\GRAPH60\GWIZ_BMP\BREAK.BMP
file3=C:\orant\GRAPH60\GWIZ_BMP\CATEGORY.BMP
file4=C:\orant\GRAPH60\GWIZ_BMP\COLUMN0.BMP
file5=C:\orant\GRAPH60\GWIZ_BMP\FINISH.BMP
file6=C:\orant\GRAPH60\GWIZ_BMP\LINE0.BMP
file7=C:\orant\GRAPH60\GWIZ_BMP\MIXED0.BMP
file8=C:\orant\GRAPH60\GWIZ_BMP\OG.BMP
file9=C:\orant\GRAPH60\GWIZ_BMP\PIE0.BMP
file10=C:\orant\GRAPH60\GWIZ_BMP\TYPE.BMP
fulldirectory=C:\orant\GRAPH60\GWIZ_BMP
file11=C:\orant\GRAPH60\GWIZ_BMP\VALUE.BMP
file12=C:\orant\GRAPH60\GWIZ_BMP\WELCOME.BMP

[olap\xrb60]
file0=C:\orant\olap\xrb60\xrb_admin.SQL
file1=C:\orant\olap\xrb60\xrb_user.SQL
fulldirectory=C:\orant\olap\xrb60

[BROWSE60]
file0=C:\orant\BROWSE60\OBE60US.MSB
file1=C:\orant\BROWSE60\OBE60US.RES
SubDir0=BROWSE60\DEMO
SubDir1=BROWSE60\SQL
fulldirectory=C:\orant\BROWSE60

[TOOLS\COMMON60]
file15=C:\orant\TOOLS\COMMON60\MMAUS.MSB
file16=C:\orant\TOOLS\COMMON60\MMMWUS.RES
file0=C:\orant\TOOLS\COMMON60\CDE1.PAL
file17=C:\orant\TOOLS\COMMON60\README.ALI
file1=C:\orant\TOOLS\COMMON60\COL16.PAL
file18=C:\orant\TOOLS\COMMON60\UCBRUSW.RES
file2=C:\orant\TOOLS\COMMON60\COL256.PAL
file19=C:\orant\TOOLS\COMMON60\UCUS.MSB
file3=C:\orant\TOOLS\COMMON60\DEFAULT.PAL
file4=C:\orant\TOOLS\COMMON60\DEUS.RES
file5=C:\orant\TOOLS\COMMON60\DEUSBM.RES
file6=C:\orant\TOOLS\COMMON60\DEUSCV.RES
file7=C:\orant\TOOLS\COMMON60\DEUTW0.RES
SubDir0=TOOLS\COMMON60\JAVA
file8=C:\orant\TOOLS\COMMON60\DEUTW1.RES
file9=C:\orant\TOOLS\COMMON60\DEUTW2.RES
file20=C:\orant\TOOLS\COMMON60\UIAUS.MSB
file21=C:\orant\TOOLS\COMMON60\UIFONT.ALI
file10=C:\orant\TOOLS\COMMON60\DEUTW3.RES
fulldirectory=C:\orant\TOOLS\COMMON60


                                               96
file22=C:\orant\TOOLS\COMMON60\UIWUS.MSB
file11=C:\orant\TOOLS\COMMON60\DEUTW4.RES
file23=C:\orant\TOOLS\COMMON60\VGIDUS.ROS
file12=C:\orant\TOOLS\COMMON60\DEUTW5.RES
file24=C:\orant\TOOLS\COMMON60\VGIMUS.RES
file13=C:\orant\TOOLS\COMMON60\DEUTW6.RES
file25=C:\orant\TOOLS\COMMON60\VGIUS.RES
file14=C:\orant\TOOLS\COMMON60\GRAY.PAL

[REPORT60\TMP]
fulldirectory=C:\orant\REPORT60\TMP

[OTRACE80\ADMIN\CDF]
fulldirectory=C:\orant\OTRACE80\ADMIN\CDF

[FORMS60\em]
fulldirectory=C:\orant\FORMS60\em

[TOOLS]
SubDir0=TOOLS\COMMON60
SubDir1=TOOLS\DOC60
fulldirectory=C:\orant\TOOLS

[REPORT60\java\jars]
file0=C:\orant\REPORT60\java\jars\myreports60.jar
file1=C:\orant\REPORT60\java\jars\xmlparser.jar
fulldirectory=C:\orant\REPORT60\java\jars

[RDBMS73]
fulldirectory=C:\orant\RDBMS73

[OTRACE80]
file0=C:\orant\OTRACE80\EPCUS.MSB
SubDir0=OTRACE80\ADMIN
SubDir1=OTRACE80\DEMO
SubDir2=OTRACE80\INCLUDE
SubDir3=OTRACE80\LIB
fulldirectory=C:\orant\OTRACE80

[NET80\DOCS]
file0=C:\orant\NET80\DOCS\README.NET8
file1=C:\orant\NET80\DOCS\README.OSS
fulldirectory=C:\orant\NET80\DOCS

[NET80\LOG]
fulldirectory=C:\orant\NET80\LOG

[MSHELP]
fulldirectory=C:\orant\MSHELP

[Patch7\orainst\backup]
file0=C:\orant\Patch7\orainst\backup\WIN32.AVF
file1=C:\orant\Patch7\orainst\backup\WIN32.INS
fulldirectory=C:\orant\Patch7\orainst\backup

[OTRACE80\ADMIN\FDF]


                                                    97
file0=C:\orant\OTRACE80\ADMIN\FDF\connect.fdf
file1=C:\orant\OTRACE80\ADMIN\FDF\EPCARM.FDF
file2=C:\orant\OTRACE80\ADMIN\FDF\ORACLE.FDF
file3=C:\orant\OTRACE80\ADMIN\FDF\ORACLED.FDF
file4=C:\orant\OTRACE80\ADMIN\FDF\ORACLEE.FDF
file5=C:\orant\OTRACE80\ADMIN\FDF\sqlwaits.fdf
file6=C:\orant\OTRACE80\ADMIN\FDF\sql_only.fdf
file7=C:\orant\OTRACE80\ADMIN\FDF\sql_plan.fdf
file8=C:\orant\OTRACE80\ADMIN\FDF\sql_txn.fdf
file9=C:\orant\OTRACE80\ADMIN\FDF\waits.fdf
fulldirectory=C:\orant\OTRACE80\ADMIN\FDF

[NLSRTL33\DEMO]
file0=C:\orant\NLSRTL33\DEMO\LX0BOOT.NLT
file1=C:\orant\NLSRTL33\DEMO\LX22711.NLT
fulldirectory=C:\orant\NLSRTL33\DEMO

[NLSRTL33]
file0=C:\orant\NLSRTL33\LXBUS.MSB
file1=C:\orant\NLSRTL33\LXEUS.MSB
file2=C:\orant\NLSRTL33\LXIUS.MSB
SubDir0=NLSRTL33\DATA
SubDir1=NLSRTL33\DEMO
fulldirectory=C:\orant\NLSRTL33

[NET80\TRACE]
fulldirectory=C:\orant\NET80\TRACE

[shrdll]
SubDir0=shrdll\SYSTEM
SubDir1=shrdll\System32
fulldirectory=C:\orant\shrdll

[REPORT60\PRINTERS]
file15=C:\orant\REPORT60\PRINTERS\PSP132.PRT
file16=C:\orant\REPORT60\PRINTERS\PSPORT.PRT
file0=C:\orant\REPORT60\PRINTERS\BOLD.PRT
file17=C:\orant\REPORT60\PRINTERS\QADFLT.PRT
file1=C:\orant\REPORT60\PRINTERS\BV.PRT
file18=C:\orant\REPORT60\PRINTERS\WIDE.PRT
file2=C:\orant\REPORT60\PRINTERS\DEC.PRT
file19=C:\orant\REPORT60\PRINTERS\WIDE180.PRT
file3=C:\orant\REPORT60\PRINTERS\DEC180.PRT
file4=C:\orant\REPORT60\PRINTERS\DECLAND.PRT
file5=C:\orant\REPORT60\PRINTERS\DECWIDE.PRT
file6=C:\orant\REPORT60\PRINTERS\DFLT.PRT
file7=C:\orant\REPORT60\PRINTERS\HPL.PRT
file8=C:\orant\REPORT60\PRINTERS\HPLWIDE.PRT
file9=C:\orant\REPORT60\PRINTERS\NO_FF.PRT
file10=C:\orant\REPORT60\PRINTERS\PS2PAGE.PRT
fulldirectory=C:\orant\REPORT60\PRINTERS
file11=C:\orant\REPORT60\PRINTERS\PSINIT.PRT
file12=C:\orant\REPORT60\PRINTERS\PSL132.PRT
file13=C:\orant\REPORT60\PRINTERS\PSL180.PRT
file14=C:\orant\REPORT60\PRINTERS\PSLAND.PRT




                                                 98
[REPORT60\java]
SubDir0=REPORT60\java\jars
fulldirectory=C:\orant\REPORT60\java

[olap\osn620]
file0=C:\orant\olap\osn620\xsncro32.dll
file1=C:\orant\olap\osn620\xssnl32.dll
file2=C:\orant\olap\osn620\xssnr32.dll
file3=C:\orant\olap\osn620\xssnro32.dll
file4=C:\orant\olap\osn620\xwsnlr32.dll
fulldirectory=C:\orant\olap\osn620

[NET80\NAMES]
fulldirectory=C:\orant\NET80\NAMES

[shrdll\SYSTEM]
file26=C:\orant\shrdll\SYSTEM\OLEAUT32.NEW
file15=C:\orant\shrdll\SYSTEM\MSVCRT2X.DLL
file27=C:\orant\shrdll\SYSTEM\OLEPRO32.DLL
file16=C:\orant\shrdll\SYSTEM\MSVCRT40.DLL
file0=C:\orant\shrdll\SYSTEM\CTL3D32.DLL
file28=C:\orant\shrdll\SYSTEM\OLEPRO32.NEW
file17=C:\orant\shrdll\SYSTEM\MSVCRT40.NEW
file1=C:\orant\shrdll\SYSTEM\CTL3D32.NT
file18=C:\orant\shrdll\SYSTEM\OC30.DLL
file2=C:\orant\shrdll\SYSTEM\CTL3D32.W95
file19=C:\orant\shrdll\SYSTEM\ODBC32.DLL
file3=C:\orant\shrdll\SYSTEM\HTMLWH.DLL
file4=C:\orant\shrdll\SYSTEM\MFC40.DLL
file5=C:\orant\shrdll\SYSTEM\MFC40.NEW
file6=C:\orant\shrdll\SYSTEM\MFC40U.DLL
file7=C:\orant\shrdll\SYSTEM\MFC42.DLL
file8=C:\orant\shrdll\SYSTEM\MFC42.NEW
file9=C:\orant\shrdll\SYSTEM\MFCANS32.DLL
file20=C:\orant\shrdll\SYSTEM\ODBCCP32.CPL
file21=C:\orant\shrdll\SYSTEM\ODBCCP32.DLL
file10=C:\orant\shrdll\SYSTEM\MSVBVM50.DLL
fulldirectory=C:\orant\shrdll\SYSTEM
file22=C:\orant\shrdll\SYSTEM\ODBCCR32.DLL
file11=C:\orant\shrdll\SYSTEM\MSVCIRT.DLL
file23=C:\orant\shrdll\SYSTEM\ODBCINST.HLP
file12=C:\orant\shrdll\SYSTEM\MSVCIRT.NEW
file24=C:\orant\shrdll\SYSTEM\ODBCINT.DLL
file13=C:\orant\shrdll\SYSTEM\MSVCR40D.DLL
file25=C:\orant\shrdll\SYSTEM\OLEAUT32.DLL
file14=C:\orant\shrdll\SYSTEM\MSVCRT.NEW

[TopDir]
SubDir8=NLSRTL33
SubDir9=OIN60
file0=C:\orant\CAGPREFS.OLD
SubDir20=bin
file1=C:\orant\CAGPREFS.ORA
SubDir21=TOOLS
SubDir10=olap
file2=C:\orant\CAUPREFS.OLD


                                             99
SubDir11=ORAINST
file3=C:\orant\CAUPREFS.ORA
SubDir12=OTRACE80
SubDir13=Patch7
SubDir14=PLSQL80
SubDir15=PRO80
SubDir16=RDBMS73
SubDir0=shrdll
SubDir17=RDBMS80
SubDir1=BROWSE60
SubDir18=REPORT60
SubDir2=CORE40
SubDir19=SHARED_DLL
SubDir3=DBS
SubDir4=FORMS60
SubDir5=GRAPH60
SubDir6=MSHELP
SubDir7=NET80

[OTRACE80\ADMIN]
file0=C:\orant\OTRACE80\ADMIN\COLLECT.DAT
file1=C:\orant\OTRACE80\ADMIN\FACILITY.DAT
file2=C:\orant\OTRACE80\ADMIN\OTRCDBMS.SQL
file3=C:\orant\OTRACE80\ADMIN\OTRCFMTC.SQL
file4=C:\orant\OTRACE80\ADMIN\OTRCFMTD.SQL
file5=C:\orant\OTRACE80\ADMIN\OTRCPRVT.SQL
file6=C:\orant\OTRACE80\ADMIN\OTRCSVR.SQL
file7=C:\orant\OTRACE80\ADMIN\REGID.DAT
SubDir0=OTRACE80\ADMIN\CDF
SubDir1=OTRACE80\ADMIN\FDF
SubDir2=OTRACE80\ADMIN\FDFWORK
SubDir3=OTRACE80\ADMIN\SAMPLE
fulldirectory=C:\orant\OTRACE80\ADMIN

[ORAINST\backup]
file26=C:\orant\ORAINST\backup\win95.RSP
file15=C:\orant\ORAINST\backup\WIN32.INS
file27=C:\orant\ORAINST\backup\win95.SHD
file16=C:\orant\ORAINST\backup\WIN32.PIN
file0=C:\orant\ORAINST\backup\MAKEDIR.VRF
file28=C:\orant\ORAINST\backup\win95.VRF
file17=C:\orant\ORAINST\backup\WIN32.PVF
file1=C:\orant\ORAINST\backup\MOHCVRT.VRF
file29=C:\orant\ORAINST\backup\Y2KRDBMS.VRF
file18=C:\orant\ORAINST\backup\WIN32.RSP
file2=C:\orant\ORAINST\backup\nt.AVF
file19=C:\orant\ORAINST\backup\WIN32.SHD
file3=C:\orant\ORAINST\backup\nt.DEI
file4=C:\orant\ORAINST\backup\nt.INS
file5=C:\orant\ORAINST\backup\nt.PIN
file6=C:\orant\ORAINST\backup\nt.PVF
file7=C:\orant\ORAINST\backup\nt.RSP
file8=C:\orant\ORAINST\backup\nt.SHD
file9=C:\orant\ORAINST\backup\nt.VRF
file20=C:\orant\ORAINST\backup\WIN32.VRF
file21=C:\orant\ORAINST\backup\win95.AVF


                                              100
file10=C:\orant\ORAINST\backup\PATH.VRF
fulldirectory=C:\orant\ORAINST\backup
file22=C:\orant\ORAINST\backup\win95.DEI
file11=C:\orant\ORAINST\backup\SERVICES.VRF
file23=C:\orant\ORAINST\backup\win95.INS
file12=C:\orant\ORAINST\backup\STOPSRVC.VRF
file24=C:\orant\ORAINST\backup\win95.PIN
file13=C:\orant\ORAINST\backup\WIN32.AVF
file25=C:\orant\ORAINST\backup\win95.PVF
file14=C:\orant\ORAINST\backup\WIN32.DEI

[ORAINST]
file150=C:\orant\ORAINST\ZRC60.MAP
file59=C:\orant\ORAINST\nt.RSP
file48=C:\orant\ORAINST\NMP80.DEI
file37=C:\orant\ORAINST\instloc.usr
file26=C:\orant\ORAINST\GE60.ja
file15=C:\orant\ORAINST\DE60.JA
file140=C:\orant\ORAINST\XR60.MAP
file49=C:\orant\ORAINST\NMP80.MAP
file38=C:\orant\ORAINST\jdk.dei
file27=C:\orant\ORAINST\GE60.MAP
file16=C:\orant\ORAINST\DE60.MAP
file0=C:\orant\ORAINST\backup.mk
file141=C:\orant\ORAINST\XRU60.DEI
file130=C:\orant\ORAINST\win95.PVF
file39=C:\orant\ORAINST\jdk.JA
file28=C:\orant\ORAINST\GRAPH60.DEI
file17=C:\orant\ORAINST\DEFAULT_HOME.rgs33
file1=C:\orant\ORAINST\BRQRY60.DEI
file142=C:\orant\ORAINST\XRU60.JA
file131=C:\orant\ORAINST\win95.rgs
file120=C:\orant\ORAINST\WIN32.INS
file29=C:\orant\ORAINST\GRAPH60.JA
file18=C:\orant\ORAINST\FORMS60.DEI
file2=C:\orant\ORAINST\BRQRY60.ja
file143=C:\orant\ORAINST\XRU60.MAP
file132=C:\orant\ORAINST\win95.RSP
file121=C:\orant\ORAINST\WIN32.PIN
file110=C:\orant\ORAINST\UCOL60.MAP
file90=C:\orant\ORAINST\SSF60.JA
file19=C:\orant\ORAINST\FORMS60.JA
file3=C:\orant\ORAINST\BRQRY60.MAP
file144=C:\orant\ORAINST\xs60.dei
file133=C:\orant\ORAINST\win95.SHD
file122=C:\orant\ORAINST\WIN32.PVF
file111=C:\orant\ORAINST\UT60.DEI
file100=C:\orant\ORAINST\TRACESVR80.MAP
file91=C:\orant\ORAINST\SSF60.MAP
file80=C:\orant\ORAINST\ROS60.DEI
file4=C:\orant\ORAINST\CA60.DEI
file145=C:\orant\ORAINST\xs60.ja
file134=C:\orant\ORAINST\win95.VRF
file123=C:\orant\ORAINST\WIN32.RSP
file112=C:\orant\ORAINST\UT60.ja
file101=C:\orant\ORAINST\TRACESVR80.us


                                              101
file92=C:\orant\ORAINST\STOPSRVC.VRF
file81=C:\orant\ORAINST\ROS60.ja
file70=C:\orant\ORAINST\QB60.DEI
file5=C:\orant\ORAINST\CA60.JA
file146=C:\orant\ORAINST\xs60.map
file135=C:\orant\ORAINST\XC60.DEI
file124=C:\orant\ORAINST\WIN32.SHD
file113=C:\orant\ORAINST\UT60.MAP
file102=C:\orant\ORAINST\TUTIL60.DEI
file93=C:\orant\ORAINST\TCP80.DEI
file82=C:\orant\ORAINST\ROS60.MAP
file71=C:\orant\ORAINST\QB60.ja
file60=C:\orant\ORAINST\nt.SHD
file6=C:\orant\ORAINST\CA60.MAP
file147=C:\orant\ORAINST\Y2KRDBMS.VRF
file136=C:\orant\ORAINST\XC60.JA
file125=C:\orant\ORAINST\WIN32.VRF
file114=C:\orant\ORAINST\varfile.tmp
file103=C:\orant\ORAINST\TUTIL60.JA
file94=C:\orant\ORAINST\TCP80.MAP
file83=C:\orant\ORAINST\RRUN60.DEI
file72=C:\orant\ORAINST\QB60.MAP
file61=C:\orant\ORAINST\nt.VRF
file50=C:\orant\ORAINST\NN60.DEI
file7=C:\orant\ORAINST\d2kr2dei.usr
SubDir0=ORAINST\backup
file148=C:\orant\ORAINST\ZRC60.DEI
file137=C:\orant\ORAINST\XC60.MAP
file126=C:\orant\ORAINST\win95.AVF
file115=C:\orant\ORAINST\VGS60.DEI
file104=C:\orant\ORAINST\TUTIL60.MAP
file95=C:\orant\ORAINST\TK60.DEI
file84=C:\orant\ORAINST\RRUN60.JA
file73=C:\orant\ORAINST\QMG60.DEI
file62=C:\orant\ORAINST\ocsm.ini
file51=C:\orant\ORAINST\NN60.JA
file40=C:\orant\ORAINST\jdk.map
file8=C:\orant\ORAINST\d2kr2ins.usr
file149=C:\orant\ORAINST\ZRC60.JA
file138=C:\orant\ORAINST\XR60.DEI
file127=C:\orant\ORAINST\win95.DEI
file116=C:\orant\ORAINST\VGS60.ja
file105=C:\orant\ORAINST\UAT60.DEI
file96=C:\orant\ORAINST\TK60.JA
file85=C:\orant\ORAINST\RRUN60.MAP
file74=C:\orant\ORAINST\QMG60.JA
file63=C:\orant\ORAINST\OIN60.DEI
file52=C:\orant\ORAINST\NN60.MAP
file41=C:\orant\ORAINST\MAKEDIR.VRF
file30=C:\orant\ORAINST\GRAPH60.MAP
file9=C:\orant\ORAINST\d2kr2nls.usr
file139=C:\orant\ORAINST\XR60.JA
file128=C:\orant\ORAINST\win95.INS
file117=C:\orant\ORAINST\VGS60.MAP
file106=C:\orant\ORAINST\UAT60.ja
file97=C:\orant\ORAINST\TK60.MAP


                                        102
file86=C:\orant\ORAINST\RSF80.DEI
file75=C:\orant\ORAINST\QMG60.MAP
file64=C:\orant\ORAINST\OIN60.JA
file53=C:\orant\ORAINST\nt.AVF
file42=C:\orant\ORAINST\MM60.DEI
file31=C:\orant\ORAINST\GRUN60.DEI
file20=C:\orant\ORAINST\FORMS60.MAP
file129=C:\orant\ORAINST\win95.PIN
file118=C:\orant\ORAINST\WIN32.AVF
file107=C:\orant\ORAINST\UAT60.MAP
file98=C:\orant\ORAINST\tmp_s.0
file87=C:\orant\ORAINST\RSF80.MAP
file76=C:\orant\ORAINST\REPORT60.DEI
file65=C:\orant\ORAINST\OIN60.MAP
file54=C:\orant\ORAINST\nt.DEI
file43=C:\orant\ORAINST\MM60.JA
file32=C:\orant\ORAINST\GRUN60.JA
file21=C:\orant\ORAINST\forms6iconfig.txt
file10=C:\orant\ORAINST\d2kr2vrf.usr
fulldirectory=C:\orant\ORAINST
file119=C:\orant\ORAINST\WIN32.DEI
file108=C:\orant\ORAINST\UCOL60.DEI
file99=C:\orant\ORAINST\TRACESVR80.DEI
file88=C:\orant\ORAINST\SERVICES.VRF
file77=C:\orant\ORAINST\REPORT60.JA
file66=C:\orant\ORAINST\ORAINST.LOG
file55=C:\orant\ORAINST\nt.INS
file44=C:\orant\ORAINST\MM60.MAP
file33=C:\orant\ORAINST\GRUN60.MAP
file22=C:\orant\ORAINST\FRUN60.DEI
file11=C:\orant\ORAINST\D2SC60.DEI
file109=C:\orant\ORAINST\UCOL60.JA
file89=C:\orant\ORAINST\SSF60.DEI
file78=C:\orant\ORAINST\REPORT60.MAP
file67=C:\orant\ORAINST\orainst.olg
file56=C:\orant\ORAINST\nt.PIN
file45=C:\orant\ORAINST\MOHCVRT.VRF
file34=C:\orant\ORAINST\GUI60.DEI
file23=C:\orant\ORAINST\FRUN60.JA
file12=C:\orant\ORAINST\D2SC60.JA
file79=C:\orant\ORAINST\reports6iconfig.txt
file68=C:\orant\ORAINST\PATH.VRF
file57=C:\orant\ORAINST\nt.PVF
file46=C:\orant\ORAINST\NETC80.DEI
file35=C:\orant\ORAINST\GUI60.JA
file24=C:\orant\ORAINST\FRUN60.MAP
file13=C:\orant\ORAINST\D2SC60.MAP
file69=C:\orant\ORAINST\PB60.JA
file58=C:\orant\ORAINST\nt.rgs
file47=C:\orant\ORAINST\NETC80.MAP
file36=C:\orant\ORAINST\GUI60.MAP
file25=C:\orant\ORAINST\GE60.DEI
file14=C:\orant\ORAINST\DE60.DEI

[OIN60]
file0=C:\orant\OIN60\NVUUSW.RES


                                              103
fulldirectory=C:\orant\OIN60

[GRAPH60\GWIZ_OGD]
file0=C:\orant\GRAPH60\GWIZ_OGD\MKCHART.OGD
fulldirectory=C:\orant\GRAPH60\GWIZ_OGD

[SHARED_DLL]
fulldirectory=C:\orant\SHARED_DLL

[REPORT60\OCX\SAMPLE]
file15=C:\orant\REPORT60\OCX\SAMPLE\sxcon.rc2
file16=C:\orant\REPORT60\OCX\SAMPLE\sxcon.rtf
file0=C:\orant\REPORT60\OCX\SAMPLE\makehelp.bat
file17=C:\orant\REPORT60\OCX\SAMPLE\sxcondlg.cpp
file1=C:\orant\REPORT60\OCX\SAMPLE\orxcon.cpp
file18=C:\orant\REPORT60\OCX\SAMPLE\sxcondlg.h
file2=C:\orant\REPORT60\OCX\SAMPLE\orxcon.h
file3=C:\orant\REPORT60\OCX\SAMPLE\orxconst.h
file4=C:\orant\REPORT60\OCX\SAMPLE\readme.sxc
file5=C:\orant\REPORT60\OCX\SAMPLE\resource.h
file6=C:\orant\REPORT60\OCX\SAMPLE\stdafx.cpp
file7=C:\orant\REPORT60\OCX\SAMPLE\stdafx.h
file8=C:\orant\REPORT60\OCX\SAMPLE\sxcon.cpp
file9=C:\orant\REPORT60\OCX\SAMPLE\sxcon.h
file10=C:\orant\REPORT60\OCX\SAMPLE\sxcon.hpj
fulldirectory=C:\orant\REPORT60\OCX\SAMPLE
file11=C:\orant\REPORT60\OCX\SAMPLE\sxcon.ico
file12=C:\orant\REPORT60\OCX\SAMPLE\sxcon.mak
file13=C:\orant\REPORT60\OCX\SAMPLE\sxcon.odl
file14=C:\orant\REPORT60\OCX\SAMPLE\sxcon.rc

[olap\ecf620]
file0=C:\orant\olap\ecf620\PEX620.XCF
file1=C:\orant\olap\ecf620\XCONNECT.INI
fulldirectory=C:\orant\olap\ecf620

[NET80\ERROR]
fulldirectory=C:\orant\NET80\ERROR

[OTRACE80\ADMIN\SAMPLE]
file0=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCDTL.SQL
file1=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCFUNC.SQL
file2=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT1.SQL
file3=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT2.SQL
file4=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT3.SQL
file5=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT4.SQL
file6=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT5.SQL
file7=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT6.SQL
file8=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT7.SQL
file9=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT8.SQL
file10=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPT9.SQL
fulldirectory=C:\orant\OTRACE80\ADMIN\SAMPLE
file11=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCRPTA.SQL
file12=C:\orant\OTRACE80\ADMIN\SAMPLE\OTRCSYN.SQL

[olap\ece620]


                                                     104
file0=C:\orant\olap\ece620\COPYFILE.EXE
file1=C:\orant\olap\ece620\COPYFILE.INI
file2=C:\orant\olap\ece620\INSTALL.LOG
file3=C:\orant\olap\ece620\INSTUTIL.EXE
file4=C:\orant\olap\ece620\ORAPDS32.DLL
file5=C:\orant\olap\ece620\XCONEDIT.CNT
file6=C:\orant\olap\ece620\XCONEDIT.EXE
file7=C:\orant\olap\ece620\XCONEDIT.HLP
file8=C:\orant\olap\ece620\XCONEDIT.INI
fulldirectory=C:\orant\olap\ece620

[olap]
SubDir0=olap\ece620
SubDir1=olap\ecf620
SubDir2=olap\osn620
SubDir3=olap\xrb60
fulldirectory=C:\orant\olap

[CORE40]
file0=C:\orant\CORE40\LEMUS.MSB
file1=C:\orant\CORE40\LFIUS.MSB
file2=C:\orant\CORE40\LHTUS.MSB
file3=C:\orant\CORE40\LMMUS.MSB
file4=C:\orant\CORE40\LPMUS.MSB
file5=C:\orant\CORE40\LRMUS.MSB
file6=C:\orant\CORE40\LSFUS.MSB
file7=C:\orant\CORE40\LTMUS.MSB
fulldirectory=C:\orant\CORE40

[shrdll\System32]
file0=C:\orant\shrdll\System32\MFC40.NEW
file1=C:\orant\shrdll\System32\MFC42.NEW
file2=C:\orant\shrdll\System32\MSVCIRT.NEW
file3=C:\orant\shrdll\System32\MSVCRT.NEW
file4=C:\orant\shrdll\System32\MSVCRT40.NEW
file5=C:\orant\shrdll\System32\OLEAUT32.NEW
file6=C:\orant\shrdll\System32\OLEPRO32.NEW
fulldirectory=C:\orant\shrdll\System32

[OTRACE80\DEMO]
file0=C:\orant\OTRACE80\DEMO\atm.fdf
file1=C:\orant\OTRACE80\DEMO\atmdat100.sql
file2=C:\orant\OTRACE80\DEMO\atmdrop.sql
file3=C:\orant\OTRACE80\DEMO\atmind.sql
file4=C:\orant\OTRACE80\DEMO\atmoci.c
file5=C:\orant\OTRACE80\DEMO\atmtab.sql
file6=C:\orant\OTRACE80\DEMO\Make.bat
fulldirectory=C:\orant\OTRACE80\DEMO

[TOOLS\COMMON60\JAVA]
file0=C:\orant\TOOLS\COMMON60\JAVA\IMPORTER.JAR
fulldirectory=C:\orant\TOOLS\COMMON60\JAVA

[REPORT60]
file0=C:\orant\REPORT60\PREFS.ORA
file1=C:\orant\REPORT60\R60US.MSB


                                                  105
file2=C:\orant\REPORT60\rwsxs60.reg
file3=C:\orant\REPORT60\RWUSW.RES
SubDir0=REPORT60\java
SubDir1=REPORT60\OCI
SubDir2=REPORT60\OCX
SubDir3=REPORT60\PRINTERS
fulldirectory=C:\orant\REPORT60
SubDir4=REPORT60\TMP

[Patch7\orainst]
file0=C:\orant\Patch7\orainst\backup.mk
file1=C:\orant\Patch7\orainst\DE60.MAP
file2=C:\orant\Patch7\orainst\DEFAULT_HOME.rgs33
file3=C:\orant\Patch7\orainst\GUI60.MAP
file4=C:\orant\Patch7\orainst\ocsm.ini
file5=C:\orant\Patch7\orainst\ORAINST.LOG
file6=C:\orant\Patch7\orainst\orainst.olg
file7=C:\orant\Patch7\orainst\PB60.JA
SubDir0=Patch7\orainst\backup
fulldirectory=C:\orant\Patch7\orainst

[FORMS60\log]
fulldirectory=C:\orant\FORMS60\log

[BROWSE60\SQL]
file0=C:\orant\BROWSE60\SQL\BRWDR160.SQL
file1=C:\orant\BROWSE60\SQL\BRWDR60.SQL
file2=C:\orant\BROWSE60\SQL\BRWDRS60.SQL
file3=C:\orant\BROWSE60\SQL\BRWIN160.SQL
file4=C:\orant\BROWSE60\SQL\BRWIN60.SQL
file5=C:\orant\BROWSE60\SQL\BRWINS60.SQL
file6=C:\orant\BROWSE60\SQL\BRWPFW60.SQL
file7=C:\orant\BROWSE60\SQL\BRWSTW60.SQL
file8=C:\orant\BROWSE60\SQL\BRWUPG60.SQL
file9=C:\orant\BROWSE60\SQL\BRWXIT60.SQL
fulldirectory=C:\orant\BROWSE60\SQL

[General]
Type=FILELIST
Version=1.10.000

[OTRACE80\LIB]
file0=C:\orant\OTRACE80\LIB\OTRACE80.LIB
fulldirectory=C:\orant\OTRACE80\LIB

[OTRACE80\ADMIN\FDFWORK]
fulldirectory=C:\orant\OTRACE80\ADMIN\FDFWORK

[NET80\ADMIN\SAMPLE]
file0=C:\orant\NET80\ADMIN\SAMPLE\SQLNET.ORA
file1=C:\orant\NET80\ADMIN\SAMPLE\TNSNAMES.orig
fulldirectory=C:\orant\NET80\ADMIN\SAMPLE

[TOOLS\DOC60]
fulldirectory=C:\orant\TOOLS\DOC60




                                                   106
[PLSQL80]
file0=C:\orant\PLSQL80\PCMUS.MSB
file1=C:\orant\PLSQL80\PLSUS.MSB
file2=C:\orant\PLSQL80\PXUS.MSB
fulldirectory=C:\orant\PLSQL80

[BROWSE60\DEMO]
file0=C:\orant\BROWSE60\DEMO\BRWBLD60.SQL
file1=C:\orant\BROWSE60\DEMO\BRWDRP60.SQL
fulldirectory=C:\orant\BROWSE60\DEMO

[loadbal]
file0=C:\Program Files\loadbal\bal_tclnt.exe
file1=C:\Program Files\loadbal\beta.ico
file2=C:\Program Files\loadbal\devbal.ini
file3=C:\Program Files\loadbal\prodbal.ini
file4=C:\Program Files\loadbal\wbdcc34i.dll
file5=C:\Program Files\loadbal\www9534i.dll
file6=C:\Program Files\loadbal\wwwnt34i.dll
file7=C:\Program Files\loadbal\wwwsk34i.dll
SubDir0=loadbal\resc
fulldirectory=C:\Program Files\loadbal

[TopDir]
SubDir0=loadbal

[General]
Type=FILELIST
Version=1.10.000

[loadbal\resc]
file0=C:\Program Files\loadbal\resc\resc_1.dat
file1=C:\Program Files\loadbal\resc\resc_10.dat
file2=C:\Program Files\loadbal\resc\resc_11.dat
file3=C:\Program Files\loadbal\resc\resc_12.dat
file4=C:\Program Files\loadbal\resc\resc_2.dat
file5=C:\Program Files\loadbal\resc\resc_3.dat
file6=C:\Program Files\loadbal\resc\resc_4.dat
file7=C:\Program Files\loadbal\resc\resc_5.dat
file8=C:\Program Files\loadbal\resc\resc_6.dat
file9=C:\Program Files\loadbal\resc\resc_7.dat
file10=C:\Program Files\loadbal\resc\resc_8.dat
fulldirectory=C:\Program Files\loadbal\resc
file11=C:\Program Files\loadbal\resc\resc_9.dat

[uu]
file15=C:\Program Files\uu\wwzip34i.dll
file0=C:\Program Files\uu\00-B0-D0-7D-DC-05.cin
file1=C:\Program Files\uu\72.kps
file2=C:\Program Files\uu\cpuid.exe
file3=C:\Program Files\uu\glean.exe
file4=C:\Program Files\uu\md5.dll
file5=C:\Program Files\uu\refresh.exe
file6=C:\Program Files\uu\speedie.exe
file7=C:\Program Files\uu\uu.exe
file8=C:\Program Files\uu\uu.ini


                                                  107
file9=C:\Program Files\uu\watch.exe
file10=C:\Program Files\uu\wbdcc34i.dll
fulldirectory=C:\Program Files\uu
file11=C:\Program Files\uu\wwcpu34i.dll
file12=C:\Program Files\uu\wwsop34i.dll
file13=C:\Program Files\uu\wwwnt34i.dll
file14=C:\Program Files\uu\wwwsk34i.dll

[TopDir]
SubDir0=uu

[General]
Type=FILELIST
Version=1.10.000




                                          108
Appendix D
(http://www.microsoft.com/technet/treeview/default.asp?url=/TechNet/prodtechnol/windows2000serv/supp
ort/spdeploy.asp)

Scenario 2: Using SMS to Install the Service Pack
This scenario describes how to install the service pack from a network distribution share by using SMS.
This update installation method installs the service pack on SMS client computers that are already running
Windows 2000.
Important SMS 2.0 Service Pack 2 is required to support Windows 2000 clients.
If you want to use SMS to install the service pack, complete the following tasks:
      Create the SMS package by importing the package definition file for the service pack. In the
          package, provide the path to the service pack source files.
      Distribute the SMS package to the distribution points.
      Create the advertisement to notify SMS clients about the service pack.
This scenario assumes that you have an understanding of SMS as well as a working knowledge of software
distribution. Also, this section assumes that your SMS infrastructure is in place or that you will put an SMS
infrastructure in place before you deploy the service pack. For more information about SMS, see the SMS
2.0 Administrator's Guide. For specific information about software distribution, see Chapter 12,
"Distributing Software," in the SMS 2.0 Administrator's Guide.
A sample package definition file for Windows 2000 Service Pack 2 (W2ksp2.sms) is provided in
\Support\Tools on the Service Pack CD.
Creating the SMS Package
The first step to distributing software through SMS is to create the SMS package, which contains the files
and instructions that direct the software distribution process. When you create the SMS package, you set up
the location of the package source files (where SMS obtains the files) and the package definition file (.pdf)
for distributing the service pack.
A package definition file is a specially formatted file that contains all of the information necessary to create
the SMS package. If you import this file, SMS immediately creates the package. After you use a package
definition file to create a package, you can modify it the way you would any other SMS package.
Each predefined SMS package also contains SMS programs, which are command lines that run on each
targeted computer to control the execution of the package. Each program is a different combination of
options that you create for installing the package. For example, the package definition for the service pack
includes programs to install the service pack with or without user input. These SMS programs must be
compatible with the installation files for the package.
Note For the following procedure, "E:\" represents the drive of the network or computer where your
distribution folder is.
To create the SMS package
     1. Connect to the network or computer on which you want to place the source files.
     2. On the network or computer, create a source files directory for the service pack.
For example, to create a source files directory named SP2, type:
mkdir E:\SP2
Copy the service pack executable files to the source files directory that you created in Step 2.
               a. At the command prompt, type W2ksp2.exe -x, and press ENTER.
               b. You are then prompted to provide the directory path (for example, the source files
                    directory) that you want W2ksp2.exe extracted to.
For example, to copy the service pack executable files from the service pack CD in the CD-ROM drive (D:)
to the source files directory named SP2, type:
xcopy D:\ E:\SP2 /e
Important If you download service pack from the Microsoft Windows 2000 Service Pack Web site, you
must extract the compressed program file before you can copy it to the source files directory.
     3. In the SMS Administrator console, select Packages.
     4. From the Action menu, point to New, and then click Package From Definition.
     5. On the Welcome page, click Next.




                                                                                                           109
    6.    To import the service pack package definition file, click Browse from the Package definition list,
          and then navigate to the folder where the package definition file for the service pack was created
          (For example, \Support\Tools\W2KSP2.SMS on the SP2 CD). When you find the package
          definition file, click it.
     7. On the Source Files page, click Always obtain files from a source directory, and then click
          Next.
     8. In the Source directory box, enter the Universal Naming Convention path (For example,
          \\server1\share1\dir1) to the package source files (see Step 3).
     9. Click Next, and then click Finish.
     10. After the wizard finishes, under your new package, select Programs.
     11. In the results pane (on the right side of the console), double-click the service pack program.
     12. In the Program Properties dialog box, on the General tab, verify that the predefined Command
          line is the correct setup command for your needs.
     13. To check and modify the options that control the execution of your program, click the
          Requirements, Environment, and Advanced tabs. For more information about the options on
          these tabs, see the SMS 2.0 Administrator's Guide.
     14. To close the Program Properties dialog box, click OK.
Distributing the SMS Package to the Distribution Points
After you create the SMS package for the service pack, you can distribute the package to your distribution
points. Distribution points are shares on site systems where SMS copies the package source files for access
by the client computers.
To distribute the SMS package to the distribution points
     1. In the SMS Administrator console, select Packages, select the SMS package that you created for
          the service pack, and then select Distribution Points.
     2. From the Action menu, point to New, and then click Distribution Points.
The New Distribution Points wizard appears.
     3. Click Next to continue past the Welcome page, and select the distribution points you want to use.
Note All the distribution points for all sites are listed, so you can select all the distribution points now. You
want to specify a distribution point for every site that has clients needing SP2.
     4. Click Finish to start the distribution. The package is immediately distributed to the selected
          distribution points
Note Distribution points must have sufficient disk space for the SMS package. For instructions about how
to check the disk space for distribution points from the SMS Administrator console, see the SMS 2.0
Administrator's Guide.
Creating the Advertisement
After you distribute the SMS package to the distribution points, you can create the advertisement that offers
the package to the SMS clients.
To create the advertisement
     1. Create a collection of SMS clients to receive the installation program. You can base the collection
          on a query or direct membership rules.
Note For more information about creating a collection, see the SMS 2.0 Administrator's Guide.
     2. Right-click the collection that will receive the program, and then click All Tasks/Distribute
          Software.
The Distribute Software wizard starts.
     3. Click Next.
     4. Click Distribute an existing package, click the SMS package for the service pack, and then click
          Next.
     5. On the Distribution Points dialog box, under Distribution points, make sure the desired
          distribution points are selected, and then click Next.
     6. On the Advertise a Program dialog box, click "Yes. Advertise a program," click the program
          you want to advertise, and then click Next.
     7. On the Advertisement Target dialog box, confirm that the collection of clients selected in Step 2
          is listed, and then click Next. If this collection is not listed, click Browse to find the collection you
          want.
     8. On the Advertisement Name dialog box, fill in the advertisement name if appropriate, and then
          click Next.


                                                                                                              110
    9. Specify any subcollections that should also receive this advertisement, and then click Next.
    10. Confirm or change the time the advertisement is offered and specify whether the advertisement
         should expire and when.
    11. To assign the program, on the Assign Program page, click Yes.
    12. Click Next, and then click Finish.
SMS clients refresh the list of advertised programs on a configurable polling interval, which defaults to 60
minutes. After the service pack advertisement is received on a client, it appears (for selection by users) in
the Advertised Programs wizard in Control Panel, or, if assigned (mandatory), it runs on the schedule
specified.




                                                                                                          111

								
To top