Supersonic Man

December 20, 2011

Java vs Silverlight: which has the worse developer install experience?

Filed under: Hobbyism and Nerdry,technology — Supersonic Man @ 10:18 pm

So which has the worse installation experience for developers — Java, or Silverlight?  Let’s see the contestants in action…

I noticed that Java had stopped working in Firefox.  While checking the status of plugins, I noticed that Silverlight 5 has finally come out.  I’d been hoping for this, because Netflix Instant (which runs in Silverlight 4) tends to have somewhat jittery playback under x64, though it plays smoothly on old slow 32-bit systems, and rumor had it that Silverlight 5 might fix this — if for no other reason than that it would finally provide an x64 plugin.

So I installed it, and then I checked to see whether my Silverligth (argh, I keep typing it that way!) projects in Visual Stupido would still build correctly.  Nope — the solution load stops in the middle as soon as it hits a Silverlight project.  After about a minute of wondering why it wasn’t progressing, I discovered that VS had opened an error message dialog, and helpfully put it behind the window it was reporting an error in.  (Always a helpful touch, that.)  It said that it needed an up to date version of the developer runtime installed.  It included a link for the download… a link that pointed to the wrong version.  So after finding out that that didn’t work, I tried googling for the right version.  I came up with Silverlight 5 Tools for Visual Stupido.  33 megabytes… okay, I thought, that’s not too heavyweight…

It took over ten minutes for their server to download it, and then when I ran the install, it thrashed my system drive for fifteen minutes solid, so hard that my desktop would repeatedly get bogged down into near immobility.  Firefox would repeatedly go “not responding” while this installer was running, just because the system was so bogged down.  For extra fun, the last five minutes of this disk thrashing took place after the progress bar reached 100%.

And then it turned out to be the wrong download.  Though maybe one I would have needed anyway as a next step, I dunno.  Anyway, I then managed to carefully find the correct one, and it installed easily and Visual Studio worked and the projects seem to run the same as ever.

At the end of this, I find it has added three new folders to my start menu.  One of them containing nothing but a single URL.

So Silverlight is now ready to go, I guess, though I have not yet seen whether it cured my issue with Netflix Instant.

[update: it’s not cured, at least not in Firefox, but it seems to be not as bad.  But what about 64-bit IE?  For the first time, both the browser and the plugin are native… hm, it’s better than in 32-bit Firefox, but still not perfect.   AW CRAP, it’s smoother, but now the sound is out of sync!  Back to Firefox… no, the sound is the same there.  Not a browser issue, I guess.]

Now, Java.  I probably wouldn’t have nearly as much trouble with this if I’d just done things the way Sun, I mean Oracle, wanted me to.  The trouble began, I believe, when I installed Java Development Kit 1.6.29.  I had a Java Runtime Environment 1.6.22 sitting around, and since the JDK comes with a perfectly good new updated JRE, I got rid of the outdated one.  This, apparently, is what broke the browser plugin.  Now, whenever I try to view a a page with an applet, it either fails silently with no indication that a plugin is needed (you’re not supposed to do it that way, Firefox!) or it tries to get me to download and install a complete JRE.  I already have a JRE, and furthermore, I do not want two of them.  I don’t want to have different versions, and not know which one is being used, and have random problems that come from the two being out of sync.  I already encountered one bug which had to be resolved by updating from 6.22 to 6.29 — I don’t want more.

So I googled and googled and googled for how you install a browser plugin from the JDK.  Nothing.  All I got was people saying that the JDK includes the JRE and the plugin, so it should work.  (Maybe back in the day, it did.)  I ran the JDK installer again, to refresh the files… and it accidentally wiped out my existing install and created a new one in the wrong directory.  (A process which caused as much burden on the system, and Firefox freezing, as the Silverlight install did, but not for as long.)  The browser still had no plugin.

Annoyed, I deleted the misplaced install and ran the installer again.  And now I find that it won’t work anymore.  It says it’s already installed, and if I say install again, it goes “Error 1723.  There is a problem with the Windows Installer package.  A DLL required for this install to complete could not be found.”

I found that there were three versions in the control panel list of installed programs to remove.  At this point, none of them actually existed on disk, so I just removed the entries.  The installer still insisted the product was already on disk, and had the same error.  Even though all it does with the old installation, apparently, is to delete it.

Oh, and the initial dialog that the JDK installer pops up has two lines of text drawn on top of each other so neither is legible.

I already emptied the recycle bin, so I can’t just put back the bad install that I deleted the wrong way.  I have to try to find where this thing is keeping its “knowledge” that the JDK is already installed.  It’s not the environment variables — they still point to the original correct location that it blitzed.  It’s not the installed programs list.  Is it the registry?  I found quite a bit of relevant stuff… there’s litter from three different installs in here.  (And a bunch of crap from a long deleted test install of OpenWatcom, which happened to fit the search string I used.)  I cleaned a bunch of it out.  I deleted an entire subtree named JavaSoft, which I note had a plugin reference.

So a couple of hours after I started all this, I was able to finally get a correct install of the JDK.  Yay, my registry cleanout worked — it doesn’t think it’s already installed anymore.  (But it does still write text on top of other text in the installation dialogs.)

Oh, this is fun — it has an option in the installer for “Demos and Samples”, but then does not make it optional.  Why would I need to have that mandatorily?  But below that, it does now show an option that wasn’t visible before: “Public JRE”.  I read the explanatory text and it says that the one that comes with the JDK is a “private JRE”, which means it might be unusable with browsers.  It also says the public JRE can be uninstalled separately.  So the two really are independent.  Or are they?  It shows the public JRE using the same install directory as the rest.

Does this mean my whole quest to not have two JREs was in vain?  I dunno… let’s try not installing the public JRE.  It does say it adds 170 megs of crap to the 300 that the JDK already includes.  (Despite which, this time the install was quick and painless… this probably is because this time it was going to my “slow” mechanical disk drive instead of my “fast” solid state drive — the SSD being the one that brings the rest of the computer to its knees whenever it gets highly active.)

No Java in the browser.  Guess it needs that public JRE.  Let’s rerun the installer and activate the public JRE option…

Gah, the only way it can adjust or repair an installation is to delete the old one first!  Stupid.  And yes, I verified that it physically deletes everything before it begins reinstallation.  And this deletion process somehow ties up my desktop much worse than the original installation did.  Thankfully, it did preserve a couple of added jars I’d thrown in there at various times.

I expected that at this point, it would uninstall and reinstall smoothly.  But no!  “Another version of this product is already installed.  Installation of this version cannot continue.”  It suggests using Add/Remove Programs in Control Panel.  (And then goes to the software registration page as if it had installed successfully.)

Okay, let’s see how the Control Panel uninstaller works after the official installer has already destroyed the installation….  Huh, it didn’t fail.

Back to the installer.  Seems to be working.  I’ve put in my installation choices about six times now.  NO, it failed again!  Same error message.  Back to the Registry Editor.  The JavaSoft key was the only trace I could find — the rest of the crap did not reappear.

The installer still fails with the same error after that’s removed.  Back to Add/Remove Programs, back to the registry editor again… this time all it added there are user and system JavaSoft folders with no contents.  But hey — a little deeper digging reveals the existence of an AppData\LocalLow folder.  Let’s clean those out.

Looks like we got past that one, finally.  Okay, now I see how it handles the separation of public and private JREs: it’s prompting for where to put the public one, with a different default from where it put the private one.  So the thingy before that appeared to let you choose the folder of the public JRE was lying.

I’m going to put it as a sibling of the private JRE folder, and then compare the two.  Maybe I can just use a junction to make the same files appear in two places.

Huh — it turns out the two JREs have subsantial differences.  Almost 90 files are different in content between the two, and another 11 are present in one and not the other.  (About 540 files match.)  So the moral of the story, for me, is that you do need to have two JREs.

But the real moral for everyone is: don’t you EVER dare to delete any Java crap by any means other than the official uninstaller.  (And even then, be prepared to clean up after it.)

So who wins, Java or Silverlight?  I’m going to give Silverlight the prize for being the worst, even though Java took more of my time, because there’s much less in that case which can be excused as being because I did it wrong.


  1. Developers use templated VM to develop.

    Comment by François-Xavier — December 21, 2011 @ 4:45 am | Reply

    • then I guess I’m not a developer.

      To me doing everything in sterile VMs sounds like a formula for letting all the weird problems and tricks and gotchas and bad interactions fall on the user instead of on the developer.

      Comment by Supersonic Man — December 21, 2011 @ 10:03 am | Reply

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create a free website or blog at

%d bloggers like this: