Installing Microsoft IntelliType Keyboard and IntelliPoint Mouse -- Error 1603

Friday, December 31, 2010

The Problem: Error 1603 During Installation

While attempting to install the software for both the Microsoft MultiMedia Keyboard (1.0A) and the Mobile Mouse 3500, I received the “Error 1603 Fatal Error During Installation” message and the software failed to install.

In English, the 1603 error means:

“We don’t know WTF is wrong. Later”.

The Solution

You will find lots of advice on getting to the root of this error, from futzing with registry keys to changing permissions on folders. It’s possible you’ll need to do that. But before you go down that route, try this:

  • If you have any pending Windows updates, install them and reboot
  • Clean your Temp directories

You most likely have two of these directories:

  1. c:\Windows\Temp
  2. c:\Users\<your username>\AppData\Local\Temp

How to do it


Install pending updates

You’ll know if you have pending updates if you have a little yellow shield in your “Shut Down” button:


Simply click “Shut Down” and let it do its thing. If you don’t have that icon, then you’re ready to move on to the next step.

Clean your Temp directories

To find your local user directory:

  1. open a command prompt (win key, then type “cmd”)
  2. type echo %temp% at the prompt

It’ll show you the full path to your user temp directory:


Now, open each of those locations in Windows Explorer, select all the files in the directory (ctrl-A), and hit the Delete key. If you’re prompted with dialogs indicating that certain files can’t be deleted because they’re in use, hit “Skip” as those files are not your problem.

Do this for both directories, then try the installation again.

Again, this might not be your problem, but it’s an easy first step before attempting more involved solutions.

Wireless Mobile Mouse Transceiver -- Can’t find drivers

I received a Microsoft Wireless Mobile Mouse 3500, which comprises 2 pieces of hardware:

  • USB Transceiver
  • The Mouse

In the typical case, you plug the transceiver into a USB port, Windows attempts to load the drivers, it works, and all is well.

The Problem

In my case, Windows could not locate the drivers and consequently the mouse would not work.

It did not work correctly for me because Windows was looking in the wrong place for the drivers. Why is this? Perhaps a month ago, I had set up my machine for Android development, and to do so I needed to install some drivers for the Droid 2 that were bundled with Flash Builder Burrito. I followed the usual Windows procedure for pointing to that driver location.  To wit:


You get to this screen by manually choosing the driver location. Remember that.

The Solution

Lo these weeks later, when plugging in the transceiver, Windows was still looking in that previous driver location, even though I told Windows to “search automatically” for the driver software for the transceiver. I had mistakenly thought that “search automatically” meant “Dear Windows, you know where your drivers are, so please look there”. Nope. In this case, it meant “Search in the folder that is currently set as the Driver location in the ‘Browse driver software on your computer’ Dialog. WTF?

This feels like a bug to me.

At any rate, the solution for getting Windows to correctly find the transceiver drivers was to select “Browse my computer for software” and then use “C:\windows\winsxs” as the driver location.

In Pictures

Locate your transceiver in Device Manager (Right click “Computer”, select “properties”, then “Device Manager”. Or type “Device Manager” in the “Search Programs and Files” box)


Select “Properties”


Click “Update Driver”


Click “Browse my computer for driver software”


Type “C:\Windows\winsxs”. Click through the rest of the screens till it completes

Creating arrays of Objects in Java

Monday, December 6, 2010

You may have seen Groovy's now infamous "" class, which contains 200+ variations on this theme:

    public static Object[] createArray(Object arg0, Object arg1, Object arg2) {
        return new Object[]{
                arg0, arg1, arg2};

The authors are clear that this is a generated class whose ugliness is performance driven, and that you would never want to do such a thing in your own source code.

How would you do this in your Java? One simple approach is to use varargs:

public class VarArgsPlay {

        public static void main(String[] args) {
                VarArgsPlay v = new VarArgsPlay();
                System.out.println( v.returnArray("one","two").length );
        public Object[] returnArray(Object... obj){
                return obj;

Javabeat has a thorough treatment of this easy-to-use language feature.

cf.Objective() Call for Speakers is now Open!

You know you wanna speak at the best damn ColdFusion conference, period. Now’s your chance.

Very important: This is different from the topic survey we posted over the past few weeks. That survey helped us keep our finger on the pulse of the CF Community, as it were. If you previously suggested a topic, we thank you. But if you want to speak, you must submit a detailed proposal for that session.

The deadline is January 9, 2011. We look forward to reading your submissions… you are the reason cf.Objective() is such a fantastic event!