Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Essential Concepts

Windows ICA client - configuration by BeerGood
Posted: 28 May 03 (Edited 27 Aug 03)

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....

$VarSet = SetConsole("ALWAYSONTOP")


$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 //
WRITEVALUE ("HKEY_CURRENT_USER\Control Panel\International", "sShortDate", "dd/MM/yyyy", "REG_SZ")

;*** Exit if run on a server


;*** 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)
  If Exist("D:\program files\citrix\ica client\pn.ini")
   $PNPath = "D:\program files\citrix\ica client"
   $Result = UpdatePN($PNPath)
  If Exist($AppDir+"\ICAClient\pn.ini")
   $PNPath = $AppDir+"\ICAClient"
   $Result = UpdatePN($PNPath)

;*** Update Citrix INI files with standard and update unique settings
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.....
 $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
;*** OSVersion() - Determines platform runnings - NT4, W2K, XP - Workstation, Server
Function OSVersion()
    CASE (INSTR(UCASE($os_productSuite), "TERMINAL")) ; - Windows 2K Terminal Server
    CASE ($os_product <> "WinNT") AND ($os_dos = "5.1") ; - Windows XP Server
    CASE ($os_product = "WinNT") AND ($os_dos = "5.1")  ; - Windows XP Professional
    CASE ($os_product <> "WinNT") AND ($os_dos = "5.0") ; - Windows 2000 -
    CASE ($os_product = "WinNT") AND ($os_dos = "5.0") ; - Windows 2000 Professional -
    CASE ($os_product = "LANMANNT") OR ($os_product = "ServerNT")
    CASE $os_product = "WinNT"

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!


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.

Back to O/S Other general discussion FAQ Index
Back to O/S Other general discussion Forum

My Archive

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close