ObjectStore-Installation auf einem TerminalServer

ObjectStore-Installation auf einem TerminalServer
(oder Windows 2000 Terminal Services)

Damit die Clients auf ObjectStore-Dienste zugreifen können, sollen alle ObjectStore-EXE- und -DLL-Dateien auf dem TerminalServer als SYSTEM GLOBAL registriert werden:

register o6alloc.dll /system /v
register o6backup.dll /system /v

Eine Batch-Datei, die alle Dateien bearbeitet, kann beispielsweise mit einer anderen Batch-Datei automatisch erstellt werden:

@echo off
FOR %%f IN (%OS_ROOTDIR%\Bin\*.dll) DO echo register %%f /system /v >> reg.bat
FOR %%f IN (%OS_ROOTDIR%\Bin\*.exe) DO echo register %%f /system /v >> reg.bat

Auszug der ObjectStore FAQ:

SUBJECT: Issues with ObjectStore and Windows 2000 Terminal Services

PLATFORM: Windows 2000

PRODUCT: ObjectStore


DATE: 2001-11-12 (update)

EXPIRES: 2002-07-02

KEYWORDS: winframe, citrix, 2000 Terminal Services


I am trying to use ObjectStore on Windows 2000 via 2000 Terminal
Services, but hit the following errors:

1) When I type 'ossvrping', ObjectStore says that there is no server
available the machine, although the osserver service is running.
On top of that an 'ossvrping localhost' says there is a server
available on localhost.

2) When I try to contact the Cache Manager, I get the following error:

Miscellaneous Object Store error
Error during the initialization (from Cache Manager): 
Error during Cache Manager initialization:
ObjectStore internal error
OpenFileMapping ostore_commseg_251 - The system cannot find the file 
specified. (2)(err_internal). (err_misc)


ObjectStore 6.0 SP6 and below do not officially support Windows 2000
Terminal Services (read the bottom of this FAQ for technical details).

There is however a workaround, applicable to both ObjectStore 6.0
and 5.1. We are currently planning on supporting 2000 Terminal
Services with OS6.0 SP7. There are no plans to provide such a support
with OS5.1.

The workaround is as follows:

1) In order to be able to talk to the local server, ObjectStore must
not use shared memory. To do so, set environment variable OS_NETWORK
to O6NETTCP (OS6.0) or O4NETTCP (OS5.1).

2) In order to be able to communicate with the Cache Manager, the
ObjectStore executable and DLLs must be registered as SYSTEM GLOBAL.
To do so, run "register /system /v" on each .EXE and .DLL
in %OS_ROOTDIR%\bin.

Alternatively, you can work around the problem by runnning the
server and the Cache Manager in a console ('osserver -con' and
'oscmgr6.exe -con 0' respectively), but this might not be the
best solution, as it implies having two console windows constantly
open, which will be killed whenever you leave your session. 

To have the server or cache manager restart in console mode, you 
will need to add the command lines to the registry. 

You can add a key to the registry to have the executable run upon 
machine startup. Add a String Value to
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' and 
then add the command line (i.e. d:\Program Files\XIS\oscmgr6 -CON) as 
the string value.

The reason why ObjectStore 6.0 SP6 and below do not work with
2000 Terminal Services (2000 TS) is that an ObjectStore client
run within a 2000 TS context has by default a restricted access to
the system. Because of this restricted access, the client cannot
share memory with a process run within another context. The
ObjectStore Server and Cache Manager are examples of such
processes. OS6.0 SP7 and above create the shared memory with the
Windows 2000-specific permissions.

InstantView Scriptsprache