cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
pchans
Level 3

InstallScriptMSI project + "Template Summary = x64" = Add/Remove dosen't show informa

I did following setting :

1) Create an InstallScriptMSI project
2) Set Template Summary = x64

and this caused Add/Remove couldn't show software information on Vista 64.

Howevere, BasicMSI project + "Template Summary = x64" showed software information CORRECTLY on Vista 64.

Is this an InstallShield 2008 bug or there is anything else I have to set?
Labels (1)
0 Kudos
(5) Replies
Fearme
Level 4

I have seen this problem as well with my x64 product configurations. The Win32 ones are ok.

I use InstallScript MSI projects.

Damien
0 Kudos
Not applicable

InstallScript doesn't support installing applications as 64-bit (i.e.) writing the uninstall information to the 64-bit part of the registry, only installing 32-bit applications (that can include 64-bit files).

In the InstallScript MSI case we make a copy the uninstall information that MSI creates and modify it appropriately to run the InstallScript uninstall (which also launches MSI to uninstall as well.), however we always look for this information in the 32-bit part of the registry, so if MSI is writing this information to the 64-bit part of the registry, this copy operation may be failing, and thus no uninstall information.

Can you please confirm that MSI is writing the info to the 64-bit part of the registry in this case.

Devin Ellingson
Software Developer
InstallShield, A Macrovision Company
0 Kudos
Fearme
Level 4

Yes, the 64bit registry is missing the InstallShield_{PRODUCTGUID} key.

The 32bit one exists but is missing the information needed to be displayed in the ARP Summary Panel.

I'm a bit surprised it isn't supported 😞

I guess I can write the missing the registry entries when installing x64 product configurations.
0 Kudos
davbrown2
Level 4

I ran into a similar problem with InstallShield 2009sp2. With assistance from Acresso support, I added the following workaround (to write the missing support info into InstallShield_" + PRODUCT_GUID in the SysWow64 area of the registry).


// workaround for InstallShield bug IOC-000078120
// need to manually place Add/Remove Programs support info into 32 bit registry area

function OnEnd()
STRING svUninstKey, szManufacturer, szProductVersion, szHelpTelephone, szURLInfoAbout;
STRING szURLUPdateInfo,szHelpLink, szARPCONTACT;
NUMBER nBuff, nResult;

begin

svUninstKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_" + PRODUCT_GUID;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);


if (REMOVEALLMODE) then
RegDBDeleteValue(svUninstKey,"Publisher");
RegDBDeleteValue(svUninstKey,"DisplayVersion");
RegDBDeleteValue(svUninstKey,"HelpTelephone");
RegDBDeleteValue(svUninstKey,"HelpLink");
RegDBDeleteValue(svUninstKey,"URLInfoAbout");
RegDBDeleteValue(svUninstKey,"URLUpdateInfo");
RegDBDeleteValue(svUninstKey,"Contact");
RegDBDeleteValue(svUninstKey,"EstimatedSize");
RegDBDeleteValue(svUninstKey,"InstallLocation");

else


nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "Manufacturer", szManufacturer,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "Publisher", REGDB_STRING, szManufacturer, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ProductVersion", szProductVersion,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "DisplayVersion", REGDB_STRING, szProductVersion, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPHELPTELEPHONE", szHelpTelephone,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "HelpTelephone", REGDB_STRING, szHelpTelephone, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPHELPLINK", szHelpLink,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "HelpLink", REGDB_STRING, szHelpLink, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPURLINFOABOUT", szURLInfoAbout,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "URLInfoAbout", REGDB_STRING, szURLInfoAbout, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPURLUPDATEINFO", szURLUpdateInfo,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "URLUpdateInfo", REGDB_STRING, szURLUpdateInfo, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPCONTACT", szARPCONTACT,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "Contact", REGDB_STRING, szARPCONTACT, -1 );

// I don't think EstimatedSize is actually used - size is determined by InstallLocation

nResult = RegDBSetKeyValueEx ( svUninstKey, "EstimatedSize", REGDB_NUMBER, "22661", -1 );
nResult = RegDBSetKeyValueEx ( svUninstKey, "InstallLocation", REGDB_STRING, TARGETDIR, -1);


endif;




end;
0 Kudos
davbrown2
Level 4

Here's my latest version of the workaround - I discovered that I needed to set the "Version" DWORD value (which is displayed during a minor update "updating version X.X.0001 to X.X.0002"), and the only way I could figure out how to get it was to read it from the 64 bit registry area (anyone know of a better way?)



// workaround for InstallShield bug IOC-000078120
// need to manually place Add/Remove Programs support info into 32 bit registry area

function OnEnd()
STRING svUninstKey, szManufacturer, szProductVersion, szHelpTelephone, szURLInfoAbout;
STRING szURLUpdateInfo, szHelpLink, szARPCONTACT, szVersion, szVersionMajor, szVersionMinor;
NUMBER nBuff, nResult, nvType;

begin


// get Version from the 64 bit registry area
REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
svUninstKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + PRODUCT_GUID;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

nBuff = 256;
RegDBGetKeyValueEx (svUninstKey, "Version", nvType, szVersion, nBuff);
nBuff = 256;
RegDBGetKeyValueEx (svUninstKey, "VersionMajor", nvType, szVersionMajor, nBuff);
nBuff = 256;
RegDBGetKeyValueEx (svUninstKey, "VersionMinor", nvType, szVersionMinor, nBuff);

// Go back to the 32 bit registry

REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY;


svUninstKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_" + PRODUCT_GUID;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);


if (REMOVEALLMODE) then
//MessageBox("REMOVE",0);
RegDBDeleteValue(svUninstKey,"Publisher");
RegDBDeleteValue(svUninstKey,"DisplayVersion");
RegDBDeleteValue(svUninstKey,"Version");
RegDBDeleteValue(svUninstKey,"VersionMajor");
RegDBDeleteValue(svUninstKey,"VersionMinor");
RegDBDeleteValue(svUninstKey,"HelpTelephone");
RegDBDeleteValue(svUninstKey,"HelpLink");
RegDBDeleteValue(svUninstKey,"URLInfoAbout");
RegDBDeleteValue(svUninstKey,"URLUpdateInfo");
RegDBDeleteValue(svUninstKey,"Contact");
RegDBDeleteValue(svUninstKey,"EstimatedSize");
RegDBDeleteValue(svUninstKey,"InstallLocation");

else


nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "Manufacturer", szManufacturer,nBuff);
//MessageBox(szManufacturer,0);
nResult = RegDBSetKeyValueEx ( svUninstKey, "Publisher", REGDB_STRING, szManufacturer, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ProductVersion", szProductVersion,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "DisplayVersion", REGDB_STRING, szProductVersion, -1 );

nResult = RegDBSetKeyValueEx ( svUninstKey, "Version", REGDB_NUMBER, szVersion, -1 );
nResult = RegDBSetKeyValueEx ( svUninstKey, "VersionMajor", REGDB_NUMBER, szVersionMajor, -1 );
nResult = RegDBSetKeyValueEx ( svUninstKey, "VersionMinor", REGDB_NUMBER, szVersionMinor, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPHELPTELEPHONE", szHelpTelephone,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "HelpTelephone", REGDB_STRING, szHelpTelephone, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPHELPLINK", szHelpLink,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "HelpLink", REGDB_STRING, szHelpLink, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPURLINFOABOUT", szURLInfoAbout,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "URLInfoAbout", REGDB_STRING, szURLInfoAbout, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPURLUPDATEINFO", szURLUpdateInfo,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "URLUpdateInfo", REGDB_STRING, szURLUpdateInfo, -1 );

nBuff = 256;
MsiGetProperty(ISMSI_HANDLE, "ARPCONTACT", szARPCONTACT,nBuff);
nResult = RegDBSetKeyValueEx ( svUninstKey, "Contact", REGDB_STRING, szARPCONTACT, -1 );

nResult = RegDBSetKeyValueEx ( svUninstKey, "EstimatedSize", REGDB_NUMBER, "22661", -1 );
nResult = RegDBSetKeyValueEx ( svUninstKey, "InstallLocation", REGDB_STRING, TARGETDIR, -1);


endif;

//if(!MAINTENANCE) then
// MessageBox("First time",0);
//endif;




end;
0 Kudos