Advertisement

Installing Silverlight applications without the browser involved

One of the features we are introducing in Silverlight 4 is a ‘silent install’ mechanism for out-of-browser applications.  Currently every out-of-browser application (trusted or not) starts from an in-browser mechanism.  In some instances where you want to deploy the app via managed desktop software or perhaps via CD-ROM, you don’t want to have to tell the user to start on an HTML page first.

Now I’m not going to write here about the merits of why you might want to do this other than to point out what I believe to be the 2 prominent scenarios: managed desktop deployment and CD/DVD distribution.  I know some of you might be thinking Well if it is a managed desktop environment, why not just use WPF then? – and I would pose the same question to the customer as well first.  But again, this post is to merely outline the capabilities and I’ll let you all debate the reasons :-)

The function still requires the Silverlight plugin to be installed (and requires Silverlight 4).  It would also require the ability to install out-of-browser applications (there is a possibility for an administrator to disable this feature).  Given those two requirements, the key tool at your disposal is sllauncher.exe.  This is installed with the plugin and is located at %ProgramFiles%\Microsoft Silverlight on the machine.

NOTE: The features I’m describing here are for Windows machines.  Out-of-browser applications on OSX are actually deployed as ‘apps’ (.app) versus how just the XAP is deployed on a Windows machine.  I’m investigating how to do something similar here with scripting on OSX, but I’m unfortunately not a Mac developer :-).

Let’s take a look at the required steps and a scenario.

The Setup

You’ll need to ensure that the plugin is installed as I mentioned earlier.  You’ll also want to have a copy of the XAP handy that you’ll want to be installing.  This would be the main XAP and would be the same one that would be in the Source parameter of the <object> tag where you normally would host this.

NOTE: Because “Program Files” is different on 32- and 64-bit machines you’ll want to make sure your script/installer can handle the determination of where the sllauncher.exe program will be.  Since it isn’t a native 64-bit app, it will be in “Program Files (x86)” on a 64-bit machine.  This sometimes can cause confusion because the %ProgramFiles% environment variable on 64-bit is the native program files directory and *not* the x86 one.

Your Silverlight XAP will already have to have been configured for out-of-browser and have the appropriate manifest information within it.

Once you have those you can move on to understanding the parameters.

The Options for Install

The sllauncher.exe program for install require at a minimum 2 options and I’ll suggest that you always use all 4 I will describe here.

/install:”path-toXAP-File” – this is the first and points to the XAP file you are wanting to install.  This might be on a network share, on the CD, or in an installer.  This is required.

/origin:”URI-to-origin” – this is the ‘origin’ of the XAP and is required.  Even though you might not be using auto-update features, etc. you must set this.  I actually recommend being smart about it and having the XAP on a real URI endpoint as well so that your origin is actually real.

/shortcut:desktop+startmenu – while this is optional, it actually seems silly not to include at least one – or your users will have a hard time launching your application!  You can use: desktop, startmenu, or desktop+startmenu (my recommendation).

/overwrite – this option confirms the XAP you are installing will overwrite any existing version currently there.  This is optional, but again, I think you should use it.

Let’s assume the following scenario using the Silverlight Client for Facebook application as an example.  I have the XAP (Silverface.xap) that I want to deploy.  I would use the following command:

   1: "%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" 
   2:     /install:"Silverface.xap" 
   3:     /origin:"http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap" 
   4:     /shortcut:desktop+startmenu /overwrite

This assumes that I’m calling this command from where the Silverface.xap is currently.  Notice that the origin parameter points to the XAP origin and not the site hosting it.  This is important.  This above command would install the app and create shortcuts.

Automatically Launching the App

So what if you wanted to also automatically launch the app after installing (i.e., the CD/DVD ‘autorun’ scenario).  You again would use sllauncher.exe to do this for you after you’ve installed the app.  Using our same sample above here would be the command:

   1: "%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" 
   2:     /emulate:"Silverface.xap" 
   3:     /origin:"http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap" 
   4:     /overwrite

Notice the emulate command.  This is the launcher.  Now you’ll notice that this isn’t the same command-line options if you looked at an installed applications’ created shortcuts.  Because the folder where the XAP gets installed is pretty random, we use the origin as the hint to the sllauncher.exe program to find the right app for us and start it up.  I’ve found that using /overwrite will also give a more consistent behavior.

Uninstalling the App

What if now you want to uninstall the app?  Perhaps the managed desktop admins deprecate an application or you want the CD/DVD experience to be a non-transient one and clean up when done.  The command again is simple:

   1: "%ProgramFiles%\Microsoft Silverlight\sllauncher.exe" 
   2:     /uninstall 
   3:     /origin:http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap

Instead of the install parameter you use the uninstall parameter.  Again, notice the use of the origin parameter – this is critical in all these tasks.  The above command would remove the application and essentially does the same thing as the right-click Remove this application context menu option in Silverlight.

Using these commands in Installers

While I think those that actually have a need for this option will be using scripts and batch files, I do think some may want to include this in an installer experience.  The only option I can see for this is because you are also deploying some additional items along with your XAP (perhaps assets to the user’s document store that the app will use later like plugins or something).  Other than that if you are creating an installer simply to wrap the above methods, it might not seem wise.

Why, you ask?  Well if you think about it, your installer itself will stamp an entry into Windows as an installed application and Silverlight will also stamp an entry.  In our Facebook example, the Add/Remove Programs would show 2 “Silverlight for Facebook” entries (assuming we named our installer that as well).  This would likely confuse the user.  I’m not saying it isn’t impossible to do this nor is it difficult to manage, I just think it looks odd.

Regardless, if you are using something like InstallShield (FYI look for InstallShield LE in Visual Studio 2010…it’s very good) or the Visual Studio Setup projects, you can include a Custom Action to these installers.  The process would be a custom action *after* the install is complete because you need to locate the XAP to install.  Most setup programs are easy to use and provide pre-configured platform-specific environment variables you can use to map to things like the correct Program Files directory.

In the ideal situation you’re batch file/installer should check for the presence of Silverlight (and the correct version).  These can be done using file path verification or registry checking, both of which are outlined in the deployment guide whitepaper.

What about redistribution of Silverlight?  Right now we do not have broad redistribution rights for Silverlight.  You will still need to point users to where they can get the plugin so that they can be presented with the EULA and get the correct version for their platform.

If you do use the installer route, make sure that you account for clean un-installations as well!

Other insights and summary

You may be asking yourself if the user will be prompted here to install the application?  The answer is no.  Since this is essentially a command-line execution, the trust is implied here.  The user first has to knowingly type the command (not likely) or knowingly execute your install mechanism (batch file, installer, whatever).  These commands cannot be automatically run from the browser, for example.  For managed desktops, sure, these may be silently installed.  This is intended because in a managed desktop environment the software is, well, managed.  An elevated or normal-privileged application will install just the same using these methods.

As to the shortcuts (the /shortcut parameter being optional).  I think we’re going to fix that in some update.  Again, it’s a bit foolish to not provide one so consider it required :-).

If you find yourself in a situation needing this, hopefully it will come in useful.  I really think this is a helpful tool, but also a niche tool.  Those of you creating general consumer applications/sites will not benefit here really because you’ll likely start with an in-browser instance anyway.  But for those using managed desktop environments, or thinking about CD ‘autorun’ type situations, hopefully this information will come in useful.


This work is licensed under a Creative Commons Attribution By license.

  1. 3/26/2010 3:23 AM | # re: Installing Silverlight applications without the browser involved
    Great. This is what I have been looking for. Just one question, what approach do you suggest if I want to do a silent launch from browser i.e., should I write a separate plugin for this? Is there something like click-once available for Silverlight as well?
  2. 3/26/2010 3:58 AM | # re: Installing Silverlight applications without the browser involved
    Great job, Tim! The Silverlight Team continues to amaze me. Being using SL and WPF since the first betas I'm finding it very hard to find scenarios for WPF.
  3. 3/26/2010 5:57 AM | # re: Installing Silverlight applications without the browser involved
    Tim,

    As to the "Why"??...This gives the ability to avoid the extra work involved when you want both Browser and non-Browser (aka Desktop) support. Even though things have come a long way, there are still [based on my experience] enough differences between SL and WPF that a significant amount of duplicate works if that path is taken.

    Great Job!

    David
  4. Gravatar
    3/26/2010 8:35 AM | # re: Installing Silverlight applications without the browser involved
    This looks like it would be really easy to set up with an NSIS installer. With NSIS you have full control and responsibility over every action the installer takes, including making an entry in the uninstall list, so there's no problem with duplicate entries. A "hello world" NSIS installer does nothing more than display a message box, for example.

    Another reason why someone might want to do what you've outlined here... It sounds like you could use this to create an offline installer for your app. This stuff works without an Internet connection, right? Sometimes it's really annoying to have an Internet connection be required for app installation.
  5. 3/29/2010 2:37 AM | # re: Installing Silverlight applications without the browser involved
    Hi Tim,
    It looks like that emulate requires xap path specification and that "emulate" option, as name implies, does not requires the app to be installed, it just run the app even if not installed.
    Do you confirm?
  6. 3/29/2010 8:04 AM | # re: Installing Silverlight applications without the browser involved
    Corrado -- at least not for me that is not the exhibited behavior. The intent of emulate is to launch the installed app based on the origin URI.
  7. 3/29/2010 3:26 PM | # re: Installing Silverlight applications without the browser involved
    Bhupesh - launching an OOB app from in-browser is not supported right now. There are APIs for you to inform the user that they already have the application installed and tell them to run the installed application.
  8. 3/31/2010 2:03 PM | # re: Installing Silverlight applications without the browser involved
    Hi Time,

    Awesome tool - one really good reason for using Silverlight as opposed to WPF for the desktop deployment is so that you can have a demo of the application that people can run on your website that is almost fully functional... they don't need to download a trial first! It can be the same XAP and simply have areas blocked off if not running out-of-browser.

    For example, we provide screenshot capabilities in HelpBurner through the COM interop in Silverlight 4, so we need to run trusted OOB, however we can show a full demo to users and just let them know that feature is only available in the installed version.

    It's a super tidy way of providing users quick evaluation of your software and I'm sure will help us all reach higher conversion rates :) Plus, if you add it all into your build tool, takes little extra effort - well done!
  9. 4/1/2010 6:16 AM | # Installing Silverlight OOB applications on a Terminal Server
    Hi Tim,

    Great stuff you got here! I was wondering though whether there was a way to install the app for all users on a computer. I'm asking because the "per-user" installation mode would not really work on Terminal Servers for instance. It also makes it harder to deploy the app enterprise-wide.
  10. 4/4/2010 11:38 PM | # re: Installing Silverlight applications without the browser involved
    great article
  11. 4/20/2010 10:13 AM | # re: Installing Silverlight applications without the browser involved
    Hi Tim,

    How to use sllauncher.exe on a citrix environment ?

    Silverlight app is usually installed on a per user or one specific users application directory. But if we want to use apps on citrix server, it is not per user?

    So how to use silverlight applications over citrix?
  12. 5/5/2010 6:58 AM | # re: Installing Silverlight applications without the browser involved
    Hi Tim,

    Excellent feature!

    We're building a LOB SL app for the publishing business and thus need to run the app on both the PC and the Mac platform.
    So i was wondering; have you gotten any further in your investigation regarding how to do something similar (with scripting) on Mac/OSX?

    Thanx for you help!
  13. 5/7/2010 5:37 AM | # re: Installing Silverlight applications without the browser involved
    "Installing Silverlight applications without the WEBSERVER involved"

    Hi again Tim,

    Just a thought; if you could specify a UNC path as the (xap) origin when u install you SL app (using sllauncher), you could actually deploy your SL app (and publish new versions) in your corporate network/environment without being dependent on having a web server hosting your xap.

    Just a thought.. :-)
  14. 5/10/2010 6:56 AM | # Mac Support for SLLauncher
    Øivind asked a similar question...I was also curious if there was a Mac equivalent of SLLuancher for with /install directive for Macs.
  15. 5/10/2010 6:59 AM | # re: Installing Silverlight applications without the browser involved
    Oivind/blaze -- not an equivalent right now in order to do the above.
  16. 5/20/2010 8:22 AM | # re: Installing Silverlight applications without the browser involved
    > Corrado -- at least not for me that is not the exhibited behavior.
    > The intent of emulate is to launch the installed app based on the origin URI.

    I'm seeing the same behavior Corrado mentioned. I can't get "sllauncher /emulate" to run an already installed app. If I add the /overwrite switch with /emulate then it actually uninstalls the app. Any thoughts appreciated.
  17. 5/20/2010 10:52 AM | # re: Installing Silverlight applications without the browser involved
    > Corrado -- at least not for me that is not the exhibited behavior.
    > The intent of emulate is to launch the installed app based on the origin URI.

    >MarkTap --I'm seeing the same behavior Corrado mentioned. I can't
    > get "sllauncher /emulate" to run an already installed app. If I add
    > the /overwrite switch with /emulate then it actually uninstalls the app. Any
    > thoughts appreciated.

    I am unable to launch the installed application as well and am experiencing the same behaviour as Corrado and MarkTap.
    And is it possible to pass initialization parameters to the application?
    Any help is much appreciated.
  18. 5/25/2010 3:04 AM | # re: Installing Silverlight applications without the browser involved
    Tim,

    If you want to pursue the batch file route, there's a simple way to detect whether you're running on 64-bit or not. As you mentioned, on 64-bit, the location is Program Files (x86). This location doesn't exist on 32-bit machines. And neither does the environment variable that points to it - ProgramFiles(x86). So you can just use something like the following as the basis for a batch file:

    :: Is this a 64-bit machine?
    @echo off

    if exist "%ProgramFiles(x86)%" (
    :: We're on 64-bit
    set sllauncherlocation="%ProgramFiles(x86)\Microsoft Silverlight\sllauncher.exe"
    ) else (
    :: We're on 32-bit
    set sllauncherlocation="%ProgramFiles%\Microsoft Silverlight\sllauncher.exe"
    )
    :: then run as above
    %sllauncherlocation% /install:"myApp.xap" ...

    Obviously, you can make the batch as complex as you want, but it's a start at least
  19. 5/27/2010 12:51 AM | # re: Installing Silverlight applications without the browser involved
    Hi Tim, I am creating a desktop installer for my application..
    But its not yet hosted ...
    or you may say..Its just on a public IP..
    When I compile the nsi script giving that public IP(of course)..but I am not able to install it properly...
    Can you tell if public IP is accepted as origin or not..
    or whats the alternate..
  20. 5/27/2010 8:07 AM | # re: Installing Silverlight applications without the browser involved
    Pratibha - actually you can put whatever...are you sure you have the right LOCAL path though?
  21. 5/28/2010 12:38 AM | # re: Installing Silverlight applications without the browser involved
    hey Tim I am right..
    Just take a look...
    Name "SilverlightProject2 Desktop Installer"
    OutFile "SilverlightProject2DesktopInstaller.exe"
    InstallDir "$PROGRAMFILES\SilverlightProject2"

    XPStyle on

    Function .onInit
    # the plugins dir is automatically deleted when the installer exits
    InitPluginsDir
    File /oname=$PLUGINSDIR\splash.bmp "splash.bmp"
    splash::show 1000 $PLUGINSDIR\splash
    Pop $0
    FunctionEnd

    Section
    SetOutPath "$INSTDIR"
    SetOverwrite ifnewer
    File "Silverlight.exe"
    ExecWait "$INSTDIR\Silverlight.exe /q /doNotRequireDRMPrompt"
    File "SilverlightProject2.xap"
    ExecWait '"$PROGRAMFILES\Microsoft Silverlight\sllauncher.exe" /install:"$INSTDIR\SilverlightProject2.xap"
    /origin:"http://(an IP address)/SilverlightProject2/clientbin/ SilverlightProject2.xap"
    /shortcut:desktop+startmenu'
    SectionEnd

    Can you please check whats wrong out here..
    Means everything seem to be fine..
    But the project is not getting installed on local Desktop





  22. 6/18/2010 3:02 AM | # re: Installing Silverlight applications without the browser involved
    Hello Tim..
    Can you please tell how to open the out of browser in maximized form using nsi
  23. 7/11/2010 9:01 AM | # re: Installing Silverlight applications without the browser involved
    Hi Tim
    Great post.
    I will ask again, Is it possible to do this on a Mac/OSX?
    We are now facing a real buissness scenario with this problem..

    Thanks again
    Dani

 
Please add 7 and 4 and type the answer here:
First time here? You are looking at the most recent posts. You may also want to check out older archives. Please leave a comment, ask a question and consider subscribing to the latest posts via RSS or email. Thank you for visiting! (hide this)