Songsmith doesn’t install on Windows 7, why and a workaround

Tom Warren woke me up this “morning” (2pm) with a note pointing out Microsoft’s recently-released Songsmith does not install on Windows 7. Like a little kid with a new toy, I downloaded Songsmith and tried to install it on Windows 7...

Songsmith requires KB938660 on Windows 7

About half-way into the install, setup whines about not having KB938660 installed. Attempting to install this hotfix on a Windows 7 machine, however, will fail because it’s not needed. But it’s required for Songsmith install. You’re stuck.

The problem lies within a component Microsoft uses to check for prerequisite hotfixes (SSCustomInstall.dll).

Reflector: Decompilation of SSCustomInstaller.dll

As you can see, in Reflector’s decompiled output, the method CheckUpdateWPFPerfInstalled does not take into account that Windows 7 also has a major version number of 6, therefore always checking for the hotfix and always failing 100% of the time. Fixing this issue will require code changes to SSCustomInstall.dll at Microsoft’s end...

... however, as a quick fix, I decompiled the culprit assembly and removed the call to this flawed method.

// call method, store bool resultldarg.0
ldloca.s str2
call instance bool SSCustomInstaller.SSInstaller::CheckUpdateWPFPerfInstalled(string&)
stloc.3

became...

// set bool result to true
ldc.i4.1
stloc.3

After re-assembly (and re-signing), I dropped the new assembly into folder I planned on installing SongSmith into.

As I re-signed the assembly, the PublicKeyToken value changed. Using Orca, I generated a Transform that applies my changes, on-the-fly, to the PublicKeyToken value in the MsiAssemblyName table and finally invoked setup with the command msiexec /i SongsmithSetup.msi TRANSFORMS=UpdatePKT.mst.

Setup completed without error.

If you’d like to skip all the fun, you can simply download a package with the files you need. To summarize the steps you need to follow...

  1. Put SSCustomInstaller.dll into the folder you plan to install Songsmith into.
  2. Put invoke.bat and UpdatePKT.mst into the folder containing Songsmith.msi.
  3. Execute invoke.bat and complete setup as normal.