cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
davbrown2
Level 4

Remove/Modify missing from Add/Remove control panel entry

I have an InstallScript MSI project that was upgraded from IS11 to IS2008.

Using the newly created installer (built with IS2008):

If I do a fresh install of my product, the Add/Remove control panel looks OK.

However, if I update over a previous version - i.e. same product, older version, but created with IS11) the Remove/Modify button is missing from Add/Remove control panel entry.

I was able to reproduce it with a simple test project that I just created in IS11 (calling that v1.0 of my product). I then update the project to IS2008, change the version # to 1.0001.

I installed the 1.0 version - all looks well. I then install the 1.0001 version (the one built with IS2008) (it does an update). After that the ARP entry no longer has a Change/Remove button.

Some things I notice about the registry:

in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{(Product_GUID)} (which is not used by ARP), the following entries are added to the Uninstall registry key (these don't exist in IS11-created installers), but I think this is harmless, because NoModify, NoRemove, & NoRepair in this key are all set to 1:

ModifyPath - MsiExec.exe /I{EA4F3BBA-2344-4F55-BB4A-C5FDBABC5F3D}
UninstallString - MsiExec.exe /I{EA4F3BBA-2344-4F55-BB4A-C5FDBABC5F3D}

The problem appears to be in:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{(Product_GUID)}

i.e. the key that is actually used by ARP.

NoModify, NoRemove, & NoRepair in this key are all set to 1 (and I believe they shouldn't be) - looking at IS11-based projects, seems that they should be 0. If I change them to 0, then the ARP entry looks good again and I can remove the app.

I suppose I could write a custom action to fix these entries after installation, but that seems like a big kludge.

I opened a ticket with IS Support a week ago, and sent them the above info and the sample test app - still waiting to hear a response.

I'm surprised that no one else is encountering this.
Labels (1)
0 Kudos
(7) Replies
PeterBerton
Level 2

I have seen something similar too.

When I attempt an uninstall, I get prompted with a message, "do I want to completely remove all the features... etc... "

If I answer that message with No, my registry entry for the ARP window is removed and the product remains installed.

The entry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{(Product_GUID)} is no longer present in the registry.

But of course I cannot uninstall it from ARP anymore.

This was a project upgraded from IS11 to IS2008 as well.

I have more than 1 project acting this way.

I also have a ticket open with Macrovision.
0 Kudos
davbrown2
Level 4

Thanks, Peter - sounds like your issue is different, but probably related...

some more info for my issue - I tried designating the "v1.01" version (i.e. the one built with IS2008) as a major upgrade - didn't help.
0 Kudos
davbrown2
Level 4

Finally got an answer from support - it's a known issue (work order #IOC-000065223) and the workaround is to add something like this to the OnEnd function:

function OnEnd()
STRING svUninstKey;
begin
svUninstKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_" ^ PRODUCT_GUID;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBDeleteValue(svUninstKey,"NoModify");
RegDBDeleteValue(svUninstKey,"NoChange");
end;

This will reset the registry entries after the install completes, and fix the ARP entry.

However, I was unable to replicate Peter's problem myself - I did an install of of the IS2008-built product, and when I cancel the Remove, the uninstall registry remains and I can still see the entry in the ARP.
0 Kudos
davbrown2
Level 4

ah - what Support sent me was close, but not quite right (perhaps it's correct for InstallScript projects but not MSI InstallScript projects?)

There should be a + rather than a ^ before PRODUCT_GUID.

Otherwise an extra backslash gets introduced (UninstallShield_\{..guid..} and it doesn't work.

Also, should remove the NoRemove and NoRepair key as well...



function OnEnd()
STRING svUninstKey;
begin
svUninstKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\InstallShield_" + PRODUCT_GUID;

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBDeleteValue(svUninstKey,"NoModify");
RegDBDeleteValue(svUninstKey,"NoChange");
RegDBDeleteValue(svUninstKey,"NoRemove");
RegDBDeleteValue(svUninstKey,"NoRepair");
end;
0 Kudos
sturge
Level 6

IS 2009 and this bug STILL exists!

I see their solution was going to be what I was going to do anyway.
0 Kudos
davbrown2
Level 4

Thanks for the info about IS2009 - I was wondering about that myself. I just left the workaround in place when I updated to IS2009 - I didn't want to take the time to figure out whether it was still needed or not..
0 Kudos
Richard_Winks
Level 6

As a point of information. This issue still exists with IS2011.

I recently updated IS 10.5 projects and encountered the problem.

Richard
0 Kudos