Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Windows ICA client - configuration

Essential Concepts

Windows ICA client - configuration

by  BeerGood  Posted    (Edited  )
The win32 ICA clients store most of their configuration data in ini files stored in the (normally hidden) user profile application data directory (eg c:\documents and settings\[user name]\application data\icaclient).

Note: These files aren't removed after an uninstall so if you want to do a "fresh" install you need to delete these files. Also, upgrading to a newer version of the client does not necessarily update the files!

To find out what the various (and there are a lot) ini settings are, get yourself a copy of Win32ClientINIFileRef.pdf (Citrix Doc ID CTX14753) and have a bit of a read and experiment. You can also make changes via the gui client and then check out what happens to the ini files! Of course as with most things, be careful what you change as you may end up no longer being able to connect to the server, or perhaps having unreliable connections or even increased utilisation on the server itself - always test first before distributing it out to all the users.....

To create a default client install that has all the changes you want already setup (eg single sign on enabled), you need to modify the *.ini and *.src files in the original client installation directory. Another way of doing this is to modify the files that are in the *.msi distribution. To find out how to do this, get yourself a copy of Ready_Connect_Client.pdf (Citrix Doc ID CTX4187) and just follow the instructions.

If you only want to make a few minor changes, then you may find you can do this by simply adding some command line options when installing the client software (eg "msiexec /i ica32.msi /qn+ server_location=http://servername enable_sson=yes allow_reboot=no" ). This is discussed in ica_win32_guide.pdf (Citrix Doc ID CTX101283)

Another way of handling things is to write a script that modifies these ini files - this is useful if you want to update these after the client software has been installed. This is almost indispensible if you have a large number of clients to manage. A program that a number of people have been using for some time is "kix" - available from http://www.kixtart.org . This is a very powerful scripting program that may be fairly daunting at first, but is also very flexible. Using this you can have the login script check if it's running on a server or workstation and act accordingly, create or modify the ini files if/as required, map drives, map printers, etc. Definitely recommended checking out. If you do a bit of a search (http://www.google.com is your friend), you may also be able to find some sample scripts people have already written that you can modify.

To get you on the track, here's a sample kix script. Basically to use it setup a "clean" workstation and configure the ICA client as you desire. Now grab the ini files from the hidden data directory on the workstation - these files will be your standard ini files. The script copies the default ini files from a shared directory (modify the $TOOLSDIR line to point to where you store these files) every time a user logs on and then modifies them as required (eg changes the username). This ensures the files are always correct even if a user makes some changes to them (if someone has a problem you can then just ask them to log off & log back on again and everything should be back to normal). It also checks if it's being run on a server and, if so, exits (actually just before it exits it changes the date format first to a decent Australian format ;-) ):

; -----------------------------------------------------------------
; Kixtart Version: Kixtart 2001 V4.20
; Developers: beergood
; Company: mmmmm.....beer.....
; -----------------------------------------------------------------
; Note - the following script has been tested on 6.x versions of the ICA client. It may need to be modified to work properly with different versions....

BREAK OFF
$VarSet = SetConsole("ALWAYSONTOP")

$Script_version="1.05"

$VarSet = SetTitle("Citrix Config Script - Ver. "+$Script_version)
$VarSet = SetOption("ASCII","ON")
$VarSet = SetOption("DisableDebugging","ON")
$Domain = @LDOMAIN ;// Logon domain //
$WinSys = @LANROOT ;// windows\system32 directory //
$DesktopDir= ReadValue("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Desktop")
$AppDir = ReadValue("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "AppData")
$TOOLSDIR = "Y:\Citrix\ICAINI\" ;// Where you have the default ini files //


;****************************************************************************************
;*** Set proper date format if running on a Citrix server
;****************************************************************************************

$OS = OSVersion ;// Determine OS Version //
IF $OS = "CITRIX"
WRITEVALUE ("HKEY_CURRENT_USER\Control Panel\International", "sShortDate", "dd/MM/yyyy", "REG_SZ")
EXIT
EndIf


;****************************************************************************************
;*** Exit if run on a server
;****************************************************************************************

IF $OS = "SERVER" EXIT EndIf


;****************************************************************************************
;*** Check/update Citrix PN.INI settings - allow for different program locations
;*** depending on manual installs or OS versions
;****************************************************************************************
If Exist("C:\program files\citrix\ica client\pn.ini")
$PNPath = "C:\program files\citrix\ica client"
$Result = UpdatePN($PNPath)
Endif
If Exist("D:\program files\citrix\ica client\pn.ini")
$PNPath = "D:\program files\citrix\ica client"
$Result = UpdatePN($PNPath)
Endif
If Exist($AppDir+"\ICAClient\pn.ini")
$PNPath = $AppDir+"\ICAClient"
$Result = UpdatePN($PNPath)
Endif

;**************************************************************************************************************
;*** Update Citrix INI files with standard and update unique settings
;**************************************************************************************************************
WRITEVALUE ("HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\ICA Client", "ClientName", "@WKSTA", "REG_SZ")
Function UpdatePN($PNPath)
; Note - the above sets the client name but will not work on win9x workstations that save the name in an ini file in the root directory of the workstation.....
COPY $TOOLSDIR+"PN.INI" $PNPath
COPY $TOOLSDIR+"APPSRV.INI" $PNPath
COPY $TOOLSDIR+"WFCLIENT.INI" $PNPath
COPY $TOOLSDIR+"UISTATE.INI" $PNPath
$iniVal=READPROFILESTRING($PNPath+"\PN.INI","Program Neighborhood", "Username")
$VarSet = writeprofilestring($PNPath+"\PN.INI","Program Neighborhood", "Username", @userid)
$iniVal=READPROFILESTRING($PNPath+"\APPSRV.INI","WFClient", "LogFileWin16")
$VarSet = writeprofilestring($PNPath+"\APPSRV.INI","WFClient", "LogFileWin16", $AppDir+"\ICAClient\wfcwin.log")
$iniVal=READPROFILESTRING($PNPath+"\APPSRV.INI","WFClient", "LogFileWin32")
$VarSet = writeprofilestring($PNPath+"\APPSRV.INI","WFClient", "LogFileWin32", $AppDir+"\ICAClient\wfcwin32.log")
$iniVal=READPROFILESTRING($PNPath+"\APPSRV.INI","WFClient", "PersistentCachePath")
$VarSet = writeprofilestring($PNPath+"\APPSRV.INI","WFClient", "PersistentCachePath", $AppDir+"\ICAClient\cache")
$UpdatePN=0 ; nothing to return
EndFunction
;**************************************************************************************************************
;*** OSVersion() - Determines platform runnings - NT4, W2K, XP - Workstation, Server
;**************************************************************************************************************
Function OSVersion()
$os=""
$os_dos=@dos
$os_product=ReadValue("HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType")
$os_productSuite=ReadValue("HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions","ProductSuite")
SELECT
CASE (INSTR(UCASE($os_productSuite), "TERMINAL")) ; - Windows 2K Terminal Server
$os="CITRIX"
CASE ($os_product <> "WinNT") AND ($os_dos = "5.1") ; - Windows XP Server
$os="SERVER"
CASE ($os_product = "WinNT") AND ($os_dos = "5.1") ; - Windows XP Professional
$os="XP"
CASE ($os_product <> "WinNT") AND ($os_dos = "5.0") ; - Windows 2000 -
$os="SERVER"
CASE ($os_product = "WinNT") AND ($os_dos = "5.0") ; - Windows 2000 Professional -
$os="W2K"
CASE ($os_product = "LANMANNT") OR ($os_product = "ServerNT")
$os="SERVER"
CASE $os_product = "WinNT"
$os="NT"
ENDSELECT
$OSVersion=$OS
EndFunction



This is not a comprehensive list of what you can do - for example there are modified versions of the pn.exe file that allow you to store the ini files in different locations - so for example you may be able to share them between workstations by storing them in one location. And let's not even start on what you may be able to do with Novell's Zenworks, or Microsoft's AD and/or SMS. Personally, though, I think kix is a nice blend of simplicity & power. Anyhow, hopefully some of this has been helpful!

Cheers

P.S.
I should also note the existence of the PNA client from Citrix - this avoids some of the mucking around noted above with the standard ICA client, but relies upon the existence of a single nFuse server. This means that if the nFuse server dies for some reason, then people can't access Citrix. If you do use this client, then (for any major implementation) I'd recommend setting up some sort of round-robin dns/cisco distributed director/etc or cluster server to ensure that there is no single point of failure.
Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top