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...
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).
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
// 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...
- Put SSCustomInstaller.dll into the folder you plan to install Songsmith into.
- Put invoke.bat and UpdatePKT.mst into the folder containing Songsmith.msi.
- Execute invoke.bat and complete setup as normal.