Spookily I was just starting to look at this myself when you posted your request.

Here's what I've come up with so far, and it seems to work OK.

If you only want a server install, i.e. you don't want the PC to have the viewer, you need the following files in from the VNC distribution:
1) MSVCRT.DLL
2) MSVCIRT.DLL
3) OMNITHREAD_RT.DLL
4) VNCHOOKS.DLL
5) WINVNC.EXE
You may be not need all of these, but this set works and I can't be bothered to try and reduce it further.

Put the Setup.kix script below in the same directory and run it.

code:
; VNC Distribution Kix Script

; Author: R. M. Howarth

; Amendment History:
; 30 April 2001: Version 1.00 Initial release.

; Versions Tested with:
; Windows 95
; KixTart 95 Version 3.62
; VNC Version 3.3.3 R9

; This script developed for Win95 - the registry keys may need to be changed
; for other OSes.

; This script will copy the VNC listener software, run the service install and
; install a basic set of registry keys.

; Set the "AllowConfig" and "AllowShutdown" entries to "1" if you want them to
; be available to users. By default this script sets them so that users cannot
; stop the VNC service, and cannot change the parameters.

; You will need to do an install and set the password to get the hex values for
; the "Password" entry.

; This install expects the distro to be available in "Files" under the current
; directory.

; Set the program file path here:
"Creating directory structure..." ?
$INSTALLPATH="C:\Program Files"
$DirName="$INSTALLPATH\ORL" GoSub "MakeDir"
$DirName="$INSTALLPATH\ORL\VNC" GoSub "MakeDir"

"Copying runtime files..." ?
copy "files\*.*" $DirName

"Creating base registry information..." ?
$Key="HKEY_LOCAL_MACHINE\Software\ORL" GoSub "MyAddKey"

$Key="HKEY_LOCAL_MACHINE\Software\ORL\VNC" GoSub "MyAddKey"

$Key="HKEY_LOCAL_MACHINE\Software\ORL\VNC\3.3.3" GoSub "MyAddKey"

$Key="HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3" GoSub "MyAddKey"

$Key="HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Default" GoSub "MyAddKey"
$Entry="SocketConnect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="AutoPortSelect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="InputsEnabled" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="LocalInputsDisabled" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="IdleTimeout" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="QuerySetting" $Value="2" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="QueryTimeout" $Value="10" $Type="REG_DWORD" GoSub "MyWriteValue"
; Do a sample install and set the password to get the hex values for the next string.
$Entry="Password" $Value="ffffffffffffffff" $Type="REG_BINARY" GoSub "MyWriteValue"
$Entry="PollUnderCursor" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="PollForeground" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="PollFullScreen" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="OnlyPollConsole" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="OnlyPollOnEvent" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
; Set to "1" to allow users to stop the service
$Entry="AllowShutdown" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
; Set to "1" to allow users to change the config
$Entry="AllowConfig" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL" GoSub "MyAddKey"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks" GoSub "MyAddKey"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs" GoSub "MyAddKey"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\WINVNC.EXE" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_MButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_RButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\CALC.EXE" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\CLOCK.EXE" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\explorer.exe" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\fpxpress.exe" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\Ide.exe" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\iexplore.exe" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\MSDEV.EXE" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\mspaint.exe" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs\NOTEPAD.EXE" GoSub "MyAddKey"
$Entry="use_GetUpdateRect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Timer" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_KeyPress" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_Deferral" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="use_LButtonUp" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\WinVNC3" GoSub "MyAddKey"
$Entry="SocketConnect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="AutoPortSelect" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="InputsEnabled" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="LocalInputsDisabled" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="IdleTimeout" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="QuerySetting" $Value="2" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="QueryTimeout" $Value="10" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="Password" $Value="c137b04f51ccab36" $Type="REG_BINARY" GoSub "MyWriteValue"
$Entry="PollUnderCursor" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="PollForeground" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="PollFullScreen" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="OnlyPollConsole" $Value="1" $Type="REG_DWORD" GoSub "MyWriteValue"
$Entry="OnlyPollOnEvent" $Value="0" $Type="REG_DWORD" GoSub "MyWriteValue"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCviewer" GoSub "MyAddKey"

$Key="HKEY_CURRENT_USER\Software\ORL\VNCviewer\MRU" GoSub "MyAddKey"
$Entry="index" $Value="A" $Type="REG_SZ" GoSub "MyWriteValue"
$Entry="A" $Value="10.16.28.24:0" $Type="REG_SZ" GoSub "MyWriteValue"

; Run the service install
"Installing VNC service..." ?
Shell "$DirName\winvnc.exe -install"
if @ERROR "FATAL: Service install failed with error code @ERROR" EXIT endif

RETURN

:MyAddKey
if ExistKey($Key)
if AddKey($Key)
"ABORTING: Error @ERROR adding key $Key" ?
" Additional Info: @SERROR" ?
exit
endif
endif
RETURN

:MyWriteValue
if WriteValue($Key,$Entry,$Value,$Type)
"WARNING: Error @ERROR updating $Entry in $Key with value $Value" ?
" Additional Info: @SERROR" ?
endif
RETURN

:MakeDir
md $DirName
if @ERROR
"FATAL: Could not create $DirName - maybe it already exists?"
EXIT
endif
RETURN


You can fit the script, VNC files and the KixTart files on one floppy disk.

You must change the script to set the password - I've obviously set it to a garbage value ("fffff...") in this sample script to protect my password. To find the hex value you need for the password, do a test install using the password you want then look it up in the registry.

As it is configured the script will not allow users to stop the service or change the settings.

Distributing it this way does not create the start menu groups either.

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

Richard Howarth