PDA

View Full Version : Repackager creates invalid snapshot



jdelap
01-10-2014, 10:25 AM
TL:DR - I am having problems with the IS repackager creating an ISR file that it cannot parse to create an MSI from (and, I think, further inconsistencies after I manually edit the ISR file)

I am using IS 2012 Spring Pro v19 SP1. I have used this sucessfully to snap 32 bit apps on a win7 32 bit machine (Running the repackger from an XP SP3 machine where it is installed). Today, I snapped an app for our call centre (Genesys CCPulse+). It is a legacy IS setup program and I could not launch setup.exe with -s -f1"<path to setup.iss>", simply getting an error that setup.exe could not be launched. (Setup.exe needs compatibility mode set to Windows server 2003 to install but otherwise this command line works and the aapplication works when it is installed in this way). I retried letting the repackager run setup.exe interactively and completed the install. The repackager completed its analysis and presented a plausible looking snap although there were a lot of registry keys that didn't seem to have any values in them. I tidied the snap up and attempted to build the MSI. This failed almost immediately with "Unrecognized line in .nir file." in the build log. I repeated the process (I am snapping on a VM which I reset) and got the same result.

This forum post (http://community.flexerasoftware.com/showthread.php?192387-Repackager-building-and-ISM-Problem) pointed me towards Updated.isr (the only ISR or NIR file I had) which I found contained entries such as the following:


REGEDIT4

[HKEY_CLASSES_ROOT\CFGSERVER.CfgClientCtrl.1],0,,
""="CfgClient Control"
@=""
...The entry above should be just the default value set to CfgClient Control

[HKEY_CLASSES_ROOT\CLSID\{29C9A70B-5B37-11CF-B546-0000E80C21F3}\Control],0,,
@=""
...where there is only a blank, default value (above), it seems to be handled ok

[HKEY_CLASSES_ROOT\CLSID\{29C9A70B-5B37-11CF-B546-0000E80C21F3}\InprocServer32],0,,
""="[GENESYS_COMMON_COMPONENTS]dbserver.ocx"
"ThreadingModel"="Apartment"
This entry should be the default value set to the path to the OCX file and a value named ThreadingModel

I edited all of the entries to ensure that they were in the form "value"="data" or @="data" (or @="") and retried building the MSI. This failed again but got much further. There were a number of warnings and errors and I am unsure whether these represent genuine problems with the snapshot or if there are further incompatibilities which mean that the build processs simply cannot interpret it correctly.

For example (from build log)


Undefined typelib '{29C9A713-5B37-11CF-B546-0000E80C21F3}': no component exists for file '[\[]GENESYS_COMMON_COMPONENTS[\]]dbserver.ocx'. This may result in ICE33 warnings.
This file does exist in the snap and appears to have all of the Class definitions in the registry. I note the strange escaping going on around the square brakets for the directory property [GENESYS_COMMON_COMPONENTS]. Could the build process be choking in a similar way to the initial ISR file format issues?


Undefined ProgID 'DBSERVER.DBServerCtrl.5': the CLSID '{29C9A70B-5B37-11CF-B546-0000E80C21F3}' is undefined. This may result in ICE33 warnings.
Perhaps this is simply the other side of the unmatched error above?


The path 'C:\PROGRAM FILES\INSTALLSHIELD INSTALLATION INFORMATION\{EACAB488-C0EA-438B-AC6F-9DDDCB406945}' appears to be a machine-specific path. The repackaged installation may not function if this path does not exist on client machines.
The path 'C:\USERS\JAMESD\DESKTOP\IP' appears to be a machine-specific path. The repackaged installation may not function if this path does not exist on client machines.
The path 'C:' appears to be a machine-specific path. The repackaged installation may not function if this path does not exist on client machines.
The path 'C:\PROGRAM FILES' appears to be a machine-specific path. The repackaged installation may not function if this path does not exist on client machines.
The first path above exists in the snap but has been marked excluded.
The second is where setup.exe is but it is not listed in the files and folders in the snap.
There are subfolder underneath [ProgramFilesFolder] (other than [INSTALLDIR] but nother in c:\ or c:\Program files themselves.

Finally:
Loading File table

ISDEV : error -6103: Could not find file "\\swk872\c$\installshield 2012 spring projects\ccpulseplus\[ProgramFilesFolder]\InstallShield Installation Information\{EACAB488-C0EA-438B-AC6F-9DDDCB406945}\genesys.ico"
ISDEV : error -6103: Could not find file "\\swk872\c$\installshield 2012 spring projects\ccpulseplus\[ProgramFilesFolder]\InstallShield Installation Information\{EACAB488-C0EA-438B-AC6F-9DDDCB406945}\genesys_ip.ico"
ISDEV : error -6103: Could not find file "\\swk872\c$\installshield 2012 spring projects\ccpulseplus\[ProgramFilesFolder]\InstallShield Installation Information\{EACAB488-C0EA-438B-AC6F-9DDDCB406945}\internal_uninst.iss"

The same files are referenced WRT MsiFileHash table and creation of.cab files. They are all referenced in the snapshot but have been excluded along with other files in the same folder which do not appear in the log. When I check in <snapshot root>\[ProgramFilesFolder]\InstallShield Installation Information\{EACAB488-C0EA-438B-AC6F-9DDDCB406945} I find that the three files in the error are absent (other files are present, although the whole folder has been marked excluded). When I search the snapshot folder I find that they are in <snapshot root>\[Support]Language Independent OS Independent Files. There are additional files from the application in this folder which are not referenced in the repackger user interface.
Subsequently I copied the three files into the folder that they are listed as missing from and the build now reports that it completes although all of the other class definition registry warnings occur and it doesn't actually create an MSI file where it says it has:

Output file: C:\Packages\MSI_Package\CCPulse+.msi
This file doesn't exist although there is an ISM file in there.

I am going to try agin with a basic snapshot rather than installation monitoring... Any ideas gratefully received.

Attached is a zip containing the two build.logs referenced above plus the ISR reg file (before and after editing) and the project INC file
10316

As far as I am aware, the installshield installation on my XP machine (where the repackager is running from) has not be modified since the last successful snap.

jdelap
01-15-2014, 08:43 AM
hmmn, I guess nobody is biting, so here is my workaround in case it helps someone from the futur...

I resnapped the application, not using Smart Monitor and realised that the legacy IS install package was unpacking an MSI consisting solely of merge modules of some runtimes (VC++, MSXML4, Flexgrid, common controls, OLE etc), installing this and then installing the app itself from the legacy package, so I grabbed this MSI and tried to clean out all of the references to its payload from the snapshot. I got a script that looked ok but got stuck in a repair loop if I installed the embedded MSI and my snapped MSI together so I took a clean VM, installed the embedded MSI, restarted and then snapped the install not using smart monitor.

When I cleaned up this snapshot I noticed a few anomolies (for example the shortcuts were picked up twice (in %ProgramMenuFolder% and in %_Users%\All Users\Microsoft\Windows\Start Menu\Programs) and reg entries appeared in HKLM\Software\Classes rather than under HKCR). I removed noise and references to an Installshield Updating service and built the MSI. This succeeded but ignored the registry excludes (file and shortcut exclusions were ok). At this point, I edited thereg entries in the NIR files to substute HKEY_CLASSES_ROOT\ for HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ and made the same changes to the IRP file top keep them consistent. THis time, when I built the MSI, the registry excludes were respected and I ended up with a package that looks clean and so far passes functional testing.