Dynamic Citrix ICA File Intercept + Modify + Launch Tool
A recent Twitter thread by Trentent Tye of ControlUp, in which he describes temporarily renaming the Citrix Workspace app’s CDViewer.exe (the Connection Bar component) to gain the ability to resize Citrix sessions when needed, gave me the impetus to finally write a utility I’d been meaning to for a while (the Yankees season is over and the NY Giants suck, so how else am I spending an Autumn Sunday afternoon?). The way I usually disable the Connection Bar or make other changes to session settings in advance of a session start is to first save the ICA file downloaded from the Storefront site, then quickly edit the relevant settings with a text editor, and finally launch the file, but this, of course, requires nerves of steel 😉 since I’m operating under the imminent threat of ticket expiries that would render the file useless. The new tool, ICAceptor [ī-ka-ceptor] for “ICA Interceptor”, automates the entire process by taking control of ICA files at launch, making pre-configured modifications to their content (details below), and finally launching them (via the normal Citrix client association) to start the corresponding remote sessions with the selected modified settings. When the tool isn’t running, or when interception is “paused” from its tray icon’s context menu, ICA files remain unmodified and sessions launch just as they normally would.
As can be seen in ICAceptor’s Settings dialog, the currently available modifications (the ones I’ve most frequently found a need to modify on occasion over the years) are as follows:
- Connection Bar: this controls the ICA files’ “ConnectionBar” setting which, when turned off (“No” option), allows the Session Size settings to take effect and also enables the “classic” ICA client’s dynamic session sizing capabilities described in Trentent’s tweet (without renaming CDViewer.exe).
- Color Depth: this controls the “DesiredColor” ICA file setting and offers 8-bit (256 colors), 16-bit (High Color), or 24/32-bit (True Color) – I just couldn’t bring myself to make the “16 colors” option available, it would have been too cruel.
- Session Size: this controls the “DesiredHRES”, “DesiredVRES”, and “TWIMode” settings in various combinations, including Custom. As previously mentioned, these settings will likely be ineffective if the Connection Bar remains enabled (but it isn’t automatically disabled by the tool, for your experimentation pleasure).
- Remove ICA File: this controls the … well, “RemoveICAFile” setting, which is typically enabled by default and causes the ICA file to be automatically deleted by the Citrix client after use – keeping the file around is often useful when troubleshooting ICA connection issues (and now to make sure ICAceptor did its job correctly).
Note that every one of the above settings also offers an “Unchanged” option (which is in fact the initial default setting when using the utility for the first time), so you need only change the item(s) of interest and leave the others as is. Your choices going forward will be recorded in %ProgramData%\ICAceptor\ICAceptor.ini and will persist between uses until changed via the Settings dialog.
IMPORTANT: The utility (at least in the current version) expects to find in the Registry a machine-wide association for .ica files, i.e. it requires that an ICA client be installed centrally for all users, the typical scenario, not in the current user’s profile. The ICA file interception is then achieved by registering an overriding private association under HKCU\Software\Classes while the utility is in use (and interception isn’t paused). An error message will be displayed and the program will exit if no valid machine-wide .ica association is found at launch. If this is a problem for some among you, please let me know and I’ll try to provide support for per-user ICA client installations in a future version.
Speaking of a future version, you may have noticed there’s a good-sized bit of empty real estate in the middle of my Settings dialog, so if there’s some other ICA setting you feel would be useful to be able to change on the fly, please let me know. The first good idea wins, I hate resizing dialogs! 😉