About once a week, I am asked “how do you start streamed applications directly”; that is, without using the standard publishing infrastructure. This post describes how to do it, where it works and where it doesn’t.
The quick version:
- Can you do it? Yes.
- Does it work? Yes – App Streaming 5.2 and beyond.
Update: (May 2010) – This post was originally titled that it worked somewhat. With the release of the App Streaming 5.2 client in Sept 2009, the client was changed to fully enable launching without publishing.
The second part above is the part that has kept me from promoting this as a concept. That said, I’m not the first to bring up the idea, or at least to publicly talk about it. Jeroen van de Kamp included information similar to this during his BriForum pitch, Chicago, June 2008. I was there. Being the App Streaming “Citrix-guy”, some folks in the audience thought I would be bothered by the idea of Jeroen discussing how to bypass the Citrix publishing system. I wasn’t bothered at all – the puzzled look on my face was amazement that his presented method actually worked! Read the rest of this and you’ll understand why I was puzzled. Short version, the demo should have gone down in flames! But it succeeded.
First, some history on how applications are launched. Lots of components: PNAgent, Web Interface, Internet Explorer/Firefox plugins and the streaming client. I have written about this application launch activity before. The important part is that everything comes down to a little program, raderun.exe, who throws the launch request over the wall to the Application Streaming service that does the work.
RadeRun is to streaming what WFCRun32 is for hosted applications.
wfcrun32 takes an .ICA file as a parameter, establishes a communication link to a XenApp server where the application is executed. RadeRun takes a .RAD file as a parameter, establishes a link to the streaming service, where the application is executed.
To get the parameters for raderun, run it with no parameters and a help screen will be displayed. This isn’t usually shown to users or admins, so the form of the help is a bit rugged, but the needed information is displayed in a message box along with an alarm sound that triggers and scares me every time I run it, but I have disgressed.
How to launch applications without publishing
Jeroen hadn’t invented anything mysterious; he had resurrected the old! The actual parameters and method he used to kick off the application was slightly different than the method I’ll show later in this post, but the concept is the same. Immediately at the demo, I was intrigued because I thought his alternate parameters had overcome a limitation that I didn’t know how to get past. Having the benefit of the ultimate documentation (source code), when I came back to the office I took the demo apart line by line and … still concluded that it shouldn’t work.
When Application Streaming was first being developed, RadeRun was all there was. There was no publihsing infrastructure and none of the important components in XenApp knew anything about “streaming”. Everything was developed in parallel. The streaming team needed to launch applications to test the isolation and caching systems, but all they had was RadeRun. At this point in time, raderun with parameters works great!
Time goes on, programmers working the Access Management Console, IMA, Web Interface, PNAgent, Internet Explorer and Firefox plugins all teach their code about application streaming and all of a sudden, RadeRun isn’t the only way anymore. Worse than “not the only way”, when the product goes out the door, the standalone executable method doesn’t work anymore. We know it doesn’t and can all remember when it did, but no longer matters because the correct methods are in place.
The loss of function happened as the infrastructure grew. Why? One of the things added was the central management of applications running stream to client. The Access Management Console can DISPLAY information on what applications are in active use, by any given user and a variety of other information. This happens only for stream to client for online execution. For offline, you take the app with you, so the “its running now” information isn’t useful for much because there is no way to send it home. Here, you get “Joe has this app available for offline use”. For server side, none of this applies, the hosted session has its own monitoring and the streaming client skips all of this. This works out to be important for the view of this post. Server side, the limitations I’m talking about do not apply.
This makes the “does it work” question posted at the front of this post have an answer of “yes, server side”.
Back to the online stream to client discussion. When the launch activity starts, the XenApp host infrastructure generates a launch ticket for the streaming client. This is provided to the client as part of the launch processing. Let me reword, that, the launch ticket is provided to RadeRun as a parameter. The streaming cleint does its stuff and eventually tells the central infrastructure that the launch for this app has proceeded good and is about to succeed. In the normal case, the publishing infrastructure responds, “great, good to hear it”.
If the launch ticket is “unknown, invalid or blank”, the publishing system responds “who?”. And the application launch unravels. Now, you would EXPECT that the streaming client gets this unexpected response and then … PUSHES ON. Instead, it displays an error message close to this: “The Web Interface returned an unspecified error”. Then, it aborts the launch. Technically, the launch is aborted in parallel to the message box, so by the time you see the error, its too late to ask the debugger what happened. Bummer.
BUT IT WORKS
Here’s the rub. I saw Jeroen’s demo and it worked. I have myself done it hundreds of times because when testing the streaming client, I often like to skip all the publishing steps – it really saves alot of time!
But, I know that the code says it shouldn’t work — but it does. My experience is that it works about 90% of the time and works most-often when the streaming client has already run a successful application, recently. If it doesn’t work 100% of the time, it isn’t a good solution, so I’ve avoided bringing it up.
But I still get inquiries
Customers want it to work this way so they can engage all kinds of really valid scenarios.
When does it fail? First thing in the morning, it tends to fail. Launch email program or any other really published application successfully, then non-published launches start working and you can’t make it fail again. I have no explaination for the success and I have studied it. The fact that it is sporadic makes it harder to track down and correct, but it would appear that the client is caching a recent success case and using that to say “good enough”, push on and have it work. Bla bla bla – not good enough.
What to conclude: I want it to work and you can accept this as a heads up that it might start working better in a future release. No promises though – notice that since BriForum in June, there have been TWO streaming client releases and we haven’t changed the behavior yet.
Enough on the “history”, here’s example batch file on how to do it. For this example, I profiled TextPad and stored the profile to the C:\PACK directory on the local machine hard disk.
Batch file to start the application
start “” “C:\Program Files\Citrix\Streaming Client\RadeRun.exe” /package:”c:\pack\textpad\textpad.profile” /app:”Textpad”
The supporting .RAD file
Run the bat file, and textpad comes up running inside of isolation; no publishing required.
I hope this is useful. Sometimes I don’t know if it helps to know things to this level of detail – or to know the unexpected behaviors in the technology that can cause headaches. Hopefully at least makes for good reading.
Update: Aug 24, 2010
I have received a couple references to tools that people have written to automate the execution of raderun. I list them here for public exposure…
- Martin Zugec, Executable program as launcher, RadeRunLauncher
- Had another based on web browser, can’t find it right now.
Product Architect – Application Streaming