When I came back to Citrix in 1999, there was a project started later that year to support an object model for the ICA Client. There was already a plug-in and ActiveX control available but there was also a need to have something more consistent with COM so the ICA Client could also be embedded inside things like Microsoft Office.
The concept was good but the end result would prove a bit elusive.
We were looking for something to help modernize the client and make it possible to control and get feedback from the client. COM was the obvious choice based on Microsoft standards. We also decided to use ATL to support the framework interally. We also decided to modularize the components interally so it would be possible to either use COM or support something like Mozilla.
The simplest way to explain it is that we were looking to give the client three basic characteristics for the interface. We wanted to support methods, properties, and events. Methods are great for scripting the client’s actions. Properties control how the connection is formed. Events are feedback about how the connection is going.
I worked on it from 1999 to mid 2003 (with some other small projects along the way). It was evolved over the four years to support far more than what most people would currently use. For example, it is possible with ICO to support writing a virtual channel driver. In a way, the ICA Client Object (ICO) is a wrapper around how the client works. Its pinnacle was supporting what was called ‘Headless’ mode which allowed for companies like Mercury Interactive to write software to be able to test the load of a Citrix server. Anil Roychoudhry was the lead of the project (I’m pretty sure about that).
I regret that I did not find a better way to promote the use of ICO in the field. It would have been more important to teach people about how to use it than to continue to add new features at the end. I suspect I felt more comfortable with adding more than discovering how to reach the developers.
I still get requests for help from time to time internally about ICO. It has been more than three years since I worked on the project. At most, the project had two developers working on ICO. It was great working with Jonathan and I learned much about a better coding standard. Thanks Jonathan (if you happen to read this!).
ICO really hasn’t progressed much since 2003. There hasn’t been much focus on it. That’s probably okay. The only area that I see coming up more commonly now is support for .net and other scripting models. Oh, and it sure would have helped to have built more examples!
Jeff, I think the headless client was known to the outside world as the ICA Simulation API or something like that. We called it the headless client internally. I admit headless was not a very marketable name but Hey! it did succintly capture what it did though.
Interesting you should be talking about this – I was tinkering with it the other day while looking at how to make a Citrix equivalent of Microsoft’s Remote Desktops MMC based tool. Where are the latest builds? Is there any documentation for it? I wouldn’t be surprised that if we made it available somewhere under a sensible license (assuming we haven’t already) developers would come up with some interesting apps.
A summary of ICO is available at:
Click to access ICAClientObjectSDK.pdf
Another summary is at:
The real documentation is available at:
Click to access ICA_Client_Object_Guide.pdf
You need to log into CDN to get access to these files. The software that supports ICO is actually built into the Win32 client. The documentation is the only thing in the actual SDK download.
The license is free. It is considered part of the client which is also free.
All you need to do is have a Win32 client installed to start playing with it.