cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
oivind-i
Level 3

Major upgrade cause multiple ARP entries

I have an "InstallScript MSI Project" were major upgrades leave the old entries in the "Add or Remove Programs" control panel utility.

The old product is actually uninstalled. I can observe that files and shortcuts are removed during upgrade process.

This project type add the following entries to registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{...

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{...

The problem seems to be that the 'RemoveExistingProducts' action does not remove the 'InstallShield_{...' key in registry. If I manually delete this entry, the product entry is also removed from the "ARP".

If I do a manual uninstall before upgrading, the old product entry is removed as expected.

Any help would be appreciated 🙂
Labels (1)
0 Kudos

(20) Replies
KathyMorey
Level 10

If you have an InstallShield MSI project for both the old and new versions, the uninstall should be running the scripted uninstall, which should remove the entries created by the InstallShield script engine. Have you tried logging the upgrade?
0 Kudos
oivind-i
Level 3

I am using the same IS project for both the old and new version. Our build scripts use IS automation to autmatically create new ProductCode for each build.

By logging - do you mean the "/L*" option? When using this option I see that:

--- from log file ---
...
Action start 16:04:32: RemoveExistingProducts.
Action start 16:04:32: INSTALL.
...
...
Action ended 16:04:49: RemoveExistingProducts. Return value 1.
Action start 16:04:49: InstallInitialize.
...
--------

This looks ok to me (no expert).
0 Kudos
MattPow
Level 3

I am seeing the same problem now we have upgraded to InstallShield 2009 from InstallShield 12.

This upgrading problem only occurs with InstallScript MSI projects as far as I can tell from my limited testing.

I will be raising a support issue tomorrow so I will post a response if I get one.

Here is what I did to test it.

1. Create an InstallScript MSI project called "Test App" and using all the other default values.
2. Add one component called "Version1Files" and add a simple text file to it.
3. Create a new release that combines all the files into a single "setup.exe" and using MSI 3.1 extracted from the source.
4. Build the "setup.exe" and copy it to somewhere as "Setup_v1.exe"
5. Change the Product Version to 2.00.0000
6. Change the PackageCode and ProductCode GUIDs
7. Add a "Major Upgrade" item that upgrades any earlier version that shares the same UpgradeCode.
8. Create a new component called "Version2Files" and add another simple text file to it.
9. Delete the "Version1Files" component.
10. Build the "setup.exe" and copy it to the location in step 4 as "Setup_v2.exe"
11. Install "Setup_v1.exe" and check that it has installed the text file add the ARP entries are present and show the version installed as "1.00.0000".
12. Install "Setup_v2.exe" and notice that it has upgraded as the original text file should have been removed and the second text file installed.
13. Notice the duplicate ARP entries, one for each version "1.00.0000" and "2.00.0000".

I notice that the when upgrading the previous version leaves its temporary files in the "Temp" folder as well as the key below, which causes the duplicate ARP entry.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{...
0 Kudos
MattPow
Level 3

InstallShield have recognised this as a bug in InstallShield2009. The install package that is being removed crashes when being un-installed during a Major Update. This means that there is a duplicate ARP entry and it leaves some installer files in the user's TEMP folder.

A pretty major fault I.M.H.O 😞

The only work around I have is to add a Custom Action that removes the registry key causing the duplicate entry.

1. Create an InstallScript function:

export prototype RemoveARPEntry_OnMajorUpgrade(HWND);

function RemoveARPEntry_OnMajorUpgrade(hwnd)
STRING szUninstallKeyName;
begin

// We will delete the offending registry key, which will be:
// HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{ProductGUID}
szUninstallKeyName = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_" + PRODUCT_GUID;

// Change the default root key that InstallScript will use for registry functions
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBDeleteKey(szUninstallKeyName);

end;

2. Create an InstallScript custom action.
3. Set the 'Install Exec Sequence' to 'After WriteRegistryValues'
4. Set the 'Install Exec Condition' to 'REMOVE="ALL" AND UPGRADINGPRODUCTCODE'
5. Set the 'Function Name' to 'RemoveARPEntry_OnMajorUpgrade'

This will remove the duplicate entry in ARP but will still leave the temporary files.

NOTE: This will only fix the problem for the installer that you apply these changes to. If you have already released your product then you will need to remove the registry keys of any Products that the update may replace.

Hope this helps.
0 Kudos
oivind-i
Level 3

MattPow - thanks for the info. Actually nice to know that this is a bug, not just me ... 🙂

The solution with a custom action to clean up, solves my problem.

Thanks!
0 Kudos
MattPow
Level 3

I glad that it has solved your duplicate issue but please be aware that this problem is related to a crash in the InstallShield runtime somewhere during the update process (I am investigating where).

This means that if you do something specific in say the 'OnEnd' InstallScript event handler it will not be called when undergoing a Major Update as the installer has crashed.

This is my situation and so I do not have a satisfactory work around yet.
0 Kudos
BrHartmann
Level 7

It has been almost 2 months since this thread has been touched. Can anyone from Acresso/Installshield comment on whether this bug has been fixed?

We recently upgraded to IS 2009 from IS 12. While using IS 12, I converted our Installscript MSI projects to basic MSI projects (I need to support both going forward). I found that our method of using Installscript to uninstall old versions did not work in the basic MSI, and a high-level support technician at Acresso advised me to use the Major Upgrade feature. This seemed to work great, until we did more thorough testing and found that intermittently it would fail (maybe a Windows update around that time contributes to the failure, who knows). In any case, I was really hoping this problem would be solved in IS 2009 sp2. We can't use this feature unless it will work pretty much 100% of the time. I had planned to add the upgrades back into our basic MSI projects until I came across this thread.

If there is even a hotfix for this, I would very much appreciate hearing about it.

Thanks!
0 Kudos
DebbieL
Level 17

KB article Q200007 has a fix that might help:
http://kb.acresso.com/selfservice/documentLink.do?externalID=Q200007
0 Kudos
BrHartmann
Level 7

Debbie --

Thanks for the hotfix link. After carefully reviewing the description though, I'm not sure this addresses the basic MSI issue. While the original poster complained of extra entries in ARP, I confirmed that old dll's were left behind, so the upgrade was simply failing to uninstall the older version (much more serious that just leaving an extra ARP entry that I could delete from registry). The KB article seems to be addressing only Installscript MSI issues.

Can you confirm whether or not this should also address the Basic MSI major upgrade issue (failing to properly remove the older version)? Or, is there another hotfix for this? We are close to a release and I am hesitant to tamper with Installshield and put in a hotfix unless there is good reason to believe it will directly address our problem.

Thanks.
0 Kudos
joshstechnij
Level 10 Flexeran
Level 10 Flexeran

The hotfix Debbie mentioned is specifically for InstallScript MSI -> InstallScript MSI major upgrades. Since Basic MSI projects are run purely by the Windows Installer service, upgrade functionality is provided by Windows Installer through the Upgrade table in the built MSI and the FindRelatedProducts/RemoveExistingProduct standard actions. The hotfix addresses an issue in the InstallScript engine.

In a Basic MSI project, if the old product is not being uninstalled, it is usually because the information used to determine what products should be removed (with the Upgrade table and FindRelatedProducts action) excludes the product from being removed:
- If the Detect Only option is set of the upgrade item, the old product will be detected but not removed.
- If the UpgradeCode of the old product does not match what is in the upgrade item of the new package, the old product is not detected and not removed.
- If the version of the old product does not fall between the minimum and maximum versions in the upgrade item of the new package, the old product is not detected and not removed.
- If the Languages field of the new product's upgrade item is populated and Exclude Specified Languages is set to Yes, an old product that is installed with one of the languages in the upgrade item will not be detected and not removed.

You can typically get a baseline upgrade item working by leaving the minimum and maximum version fields blank (set both include minimum and include maximum versions to No), verify the upgrade code in the upgrade item matches the UpgradeCode of the old product that is not being removed, and retest the upgrade. If this works, set the minimum and maximum versions as needed to allow all possible versions of the old product to be removed and test again.
0 Kudos
donarlee
Level 3

I have the same issue

I create a installscript msi project, in the past I just change the file version from the 1.0.1.1 to 1.0.2.2, it protmot me "This setup will perform an upgrade of [ProductName]. Do you want to continue?". If I select yes, upgrade is ok, and all files are update, is this a minor upgrade?

But when I change the file version from the 1.0.2.2 to 1.1.3.3,
run the new version setup.exe, update is ok, but no file was replaced.

I read some article, and change the Product Code and Package Code, create a major upgrade in the Media/Upgrades, rebuild the project.

I install the old version, then run the new version setup,
there's no messge show with "This setup will perform an upgrade of [ProductName]. Do you want to continue?", it looks like a first installation.

This time installation is OK, and all files is update, but there's two entries of my program in the the "Add or Remove Programs" control panel utility.

there's two folders named {old product colde} and {new product code} in the "Program Files\InstallShield Installation Information" folder.
In registry,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{old product code}: didn't exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{old product code}: exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{old product code}: exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{new product code}: exist

I saw the DebbieL's reply:
KB article Q200007 has a fix that might help:
http://kb.acresso.com/selfservice/do...rnalID=Q200007

and I replaced the two files:
C:\Program Files\InstallShield\2009\Redist\Language Independent\i386\IsSetup.dll
C:\Program Files\InstallShield\2009\Redist\Language Independent\i386\ISP\IsSetup.dll

Rebuild the project, but it dosen't work.
There's still two entries, and two {product code} key in the registry.
0 Kudos
donarlee
Level 3

I have the same issue

I create a installscript msi project, in the past I just change the file version from the 1.0.1.1 to 1.0.2.2, it protmot me "This setup will perform an upgrade of [ProductName]. Do you want to continue?". If I select yes, upgrade is ok, and all files are update, is this a minor upgrade?

But when I change the file version from the 1.0.2.2 to 1.1.3.3,
run the new version setup.exe, update is ok, but no file was replaced.

I read some article, and change the Product Code and Package Code, create a major upgrade in the Media/Upgrades, rebuild the project.

I install the old version, then run the new version setup,
there's no messge show with "This setup will perform an upgrade of [ProductName]. Do you want to continue?", it looks like a first installation.

This time installation is OK, and all files is update, but there's two entries of my program in the the "Add or Remove Programs" control panel utility.

there's two folders named {old product colde} and {new product code} in the "Program Files\InstallShield Installation Information" folder.
In registry,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{old product code}: didn't exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{old product code}: exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{old product code}: exist
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{new product code}: exist

I saw the DebbieL's reply:
KB article Q200007 has a fix that might help:
http://kb.acresso.com/selfservice/do...rnalID=Q200007

and I replaced the two files:
C:\Program Files\InstallShield\2009\Redist\Language Independent\i386\IsSetup.dll
C:\Program Files\InstallShield\2009\Redist\Language Independent\i386\ISP\IsSetup.dll

Rebuild the project, but it dosen't work.
There's still two entries, and two {product code} key in the registry.:(
0 Kudos
tommex
Level 4

this dll fix helps for new installations and new upgrades, but not removes any of the keys left behind by previous installations which have not been built with this new dll...

http://community.acresso.com/showthread.php?t=185545
0 Kudos
laugensen
Level 4

oivind-i wrote:
I have an "InstallScript MSI Project" were major upgrades leave the old entries in the "Add or Remove Programs" control panel utility.

The old product is actually uninstalled. I can observe that files and shortcuts are removed during upgrade process.

This project type add the following entries to registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{...

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{...

The problem seems to be that the 'RemoveExistingProducts' action does not remove the 'InstallShield_{...' key in registry. If I manually delete this entry, the product entry is also removed from the "ARP".

If I do a manual uninstall before upgrading, the old product entry is removed as expected.

Any help would be appreciated 🙂


This seems to have become a problem for us when we upgraded to IS 2010 from 2009. All our products that we have made new installers for, now leave duplicate entries in the ARP, even though nothing should (theoretically) have changed since 2009.

Is it possible that 2010 ships with the old files? Or has no-one else seen this problem when doing a major upgrade?
0 Kudos
RainMaker
Level 4

laugensen wrote:
This seems to have become a problem for us when we upgraded to IS 2010 from 2009. All our products that we have made new installers for, now leave duplicate entries in the ARP, even though nothing should (theoretically) have changed since 2009.

Is it possible that 2010 ships with the old files? Or has no-one else seen this problem when doing a major upgrade?


Yes I have as well, and I am certain that I have come across it before and fixed it at some point and now I am at a point where I have forgotten how I did that. I am not even certain that I should even try the hotfix.
0 Kudos
Kelter
Level 10

i'm searching for this same problem, but i don't seem to find any threads in the IS 2008 section...is there a hotfix for IS 2008 that will fix the "Multiple entries in ARP after major upgrade" issue?

The funny thing, is that upgrades were working just fine, and then, suddenly, not anymore. i just don't know what change could have possibly caused this to suddenly pop up.
0 Kudos
RainMaker
Level 4

Check the IS 2010 forum for more information. You may get a solution in there. I posted the same issue as in here, as well as a link to this thread.
0 Kudos
akashcpatel
Level 3

I am seeing the same issue with Install Shield 2008.

I tried to access the Link mentioned by Debbie but it results in a Network error.

http://kb.acresso.com/selfservice/do...rnalID=Q200007

Is the link removed?
0 Kudos
DebbieL
Level 17

The acresso.com part of the URL should be replaced by flexerasoftware.com:

http://kb.flexerasoftware.com/selfservice/documentLink.do?externalID=Q200007
0 Kudos
akashcpatel
Level 3

Hi Debbie, I tried using the DLLs you mentioned but the issue persists.

The Entry in the Registry
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{C5802E1C-380B-46EF-9F9A-268867971F2C}

persisted when I did a major upgrade (Changed the Product Code but the Upgrade Code remained Same.).

The issue happens in Windows 7 64 bit environment only. The Install Shield I use is Install Shield 2008 - Premier Edition, Version 14.

I have attached the log files. Any help is really appreciated.
0 Kudos