
Problem to create patch includes dynamic file link
Posted 30 August 2012 - 13:26
I've an installation file that contains dozens of components – Only three of them are define as dynamic file linking.
The setup is already released to many customers and I can't change/fix it.
Now I need to create a patch and each time it failed with the following error:
ISDEV : warning Val0015: The CreateFolder table contains new content. Therefore, if you are packaging this upgrade as a patch, you will not be able to make it an uninstallable patch.
New ID are generated for the dynamic files linking in each build and therefore I got this error.
Does anyone have an idea how to solved this problem? How can I make any work around to create patches "includes" dynamic file linking
Please note – I will have to create many patches for this version so one time solution is not good for me
Please advice
Many Thanks
Posted 02 September 2012 - 14:40
Stefan Krüger
InstallSite.org twitter facebook
Posted 02 September 2012 - 15:50
I even tried to made the following workaround:
1) Backup the MainSetup.ism to MainSetup_ORIG.ism
2) Open MainSetup.ism
3) Physically deleted three components which define as Dynamic file links! Not by RemoveFiles table, deleted them so that there will not be a part of the RTM setup!
4) Rebuild MainSetup.ism setup.
4) Copy MainSetup.ism to UpgradeSetup.ism
5) Generate new Package Code and update three exe.
6) Compile the UpgradeSetup.ism
7) Create patch that the previous setup is MainSetup.msi (Exclude the three components which define as Dynamic file links!) and the latest is UpgradeSetup.msi
Then I installed the patch on a machine that already has the original installation setup which released to the customer (INCLUDE the three components which define as Dynamic file links!).
The updated three executables were refreshed on the environment but in the ARP I didn't see the patch to remove ("Allow patch to be uninstalled" check box was set on).
What do you say? Do you think that this solution\Work around makes sense and could work?
Where can I see in the registry that the patch is installed?
Thanks.
Posted 02 September 2012 - 16:21
QUOTE |
Yes - i must enable to remove the patch, Why do you think its a problem? |
Did you add or change any *folders* in the new version?
Did you add or change any files in the new version?
Did you remove any files or folders?
Or did you only change some existing files that are included ion dynamic components?
When you run the build wizard, do you fill in the Patch Optimization field? (see screenshot). It should help keeping the IDs unchanged.
Stefan Krüger
InstallSite.org twitter facebook
Posted 02 September 2012 - 18:07
The dynamic components are only for the initial setup and very likely that they will not change during the life time of the version - Therefore I asked if it possible to produce the same initial setup file, without these components, and install its like a patch on top of the original installation.
off course i prefer to fix it in the original setup without workaround.
As i remember i fill in the Patch Optimization field.
According to your questions, it's not possible to add or change any *folders* in the new version, add or change any files in the new version, remove any files or folders or change some existing files that are included in dynamic components?
Appreciate your help.
Thanks
Posted 04 September 2012 - 16:09
Now I can:
1) Create an error-free .msp file.
2) The patch installation ended with no error and the target objects were refreshed as expected!
3) I can't see the patch in the ARP (Uninstall an update section) - Allow patch to be uninstalled check box was set on!
If I try to uninstall the patch by the following msiexec command I received "The patch is not applied to this product." error message
CODE |
Msiexec /package [ProductCode] uninstall [PackageCode] |
I can't see entry of this patch under the following registry path as well:
CODE |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<SQUID> |
I cannot find any mention of my Patch on the machine!
At the time we needed to changed the appearance of the ARP with the legacy single "Change\Remove" and we've done it by adding/create the following registry keys and values in the RTM setup:
CODE |
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\[Product Name] DisplayName = [ProductName] UninstallString = [SystemFolder]msiexec.exe /i [ProductCode] DisplayIcon = [INSTALLDIR]yourmain.exe HelpLink = [ARPHELPLINK] InstallLocation = [INSTALLDIR] Publisher = [Manufacturer] UninstallPath = [SystemFolder]msiexec.exe /i [ProductCode] DisplayVersion = [ProductVersion] InstallSource = [SourceDir] Language = #[ProductLanguage] URLInfoAbout = [ARPURLINFOABOUT] |
Is it possible that because of this change, It affected on the patch behavior?
Do you have other idea why I can't uninstall the patch? Or find any registration of it in other place on the machine?
I didn't find MsiPatchMetadata table in my update - Can it affect / cause the problem?
Please advice
Thanks
Posted 05 September 2012 - 11:19
QUOTE |
The MsiPatchMetadata Table contains information about a Windows Installer patch that is required to remove the patch and that is used by Add/Remove Programs. Patches installed without this table present in the patch database (.msp file) cannot be removed, and are missing some information from Add/Remove Programs. The table must be in the database of the patch file and not in a transform in the patch. |
I don't know why this table isn't included in your msp, but note that it requires MSI 3.0 or higher, so if your schema is 200 patch uninstall isn't available.
Stefan Krüger
InstallSite.org twitter facebook
Posted 05 September 2012 - 11:29
I'm trying to create the first minor upgrade on the RTM version.
Do you think that the missing MsiPatchMetadata Table can cause the problem? can i add it manually?
Did i looking for the patch installation in the registry in the correct path?
Posted 05 September 2012 - 12:06
QUOTE |
The Machine where I've installed the setup file includes MSI 5.0 - So this isn't the issue. |
But what's the Schema setting of your .msi? If it 200 this means it should be compatible with MSI 2.0
Stefan Krüger
InstallSite.org twitter facebook
Posted 11 September 2012 - 09:29
Stefan Krüger
InstallSite.org twitter facebook
Posted 11 September 2012 - 15:09
I realized my problem but not exactly weary how to fix it - I'd be happy to accept your offer.
When I wrote my setup I wanted to provide a full user interface for all the maintenance operations. This I have done by using the "Uninstall/Change" button instead of the three Modify\Repair\Uninstall buttons.
I made it according to the instructions in the attached links:
http://www.advancedi...nge-button.html and http://www.microsoft...e-programs.aspx
After installing the product the following entries exist in the registry:
CODE |
1) Software\Microsoft\Windows\CurrentVersion\installer\UserData\<ID>\Products\[GUID] Features InstallProperties Patches [b][i][GUID of my patch][/i][/b] Usage |
CODE |
2) 2.1 Software\Microsoft\Windows\CurrentVersion\Uninstall\[PRODUCT_CODE] "SystemComponent"=dword:00000001" Turn off ARP 2.2 Software\Microsoft\Windows\CurrentVersion\Uninstall\[MyApplication] - This One appears in the Add remove program |
The problems:
1. If I design a patch, the patch refers only to 2.1 above, and not 2.2.
Since 2.1 contains "SystemComponent = 1", it does not appear in the ARP, thus the patch does not appear in ARP.
(Only 2.2 remains in the ARP – without the installed patch.)
Therefore I can't uninstall or see the installed patches.
2. If I change to " SystemComponent = 0" (in 2.1), then I see in ARP two entries (one for 2.1 and one for 2.2). The patch now appears, under 2.1 (when searching for installed updates).
However, 2.1 has the default Modify\Repair\Uninstall buttons and therefore we don't want it to appear.
How do I link the installed patches to the correct registry entry (which is 2.2)?
Or do you have another approach?
Thanks.
Posted 11 September 2012 - 16:19
Instead of marking the package as ARPSYSTEMCOMPONENT, you could use ARPNOREMOVE (and ARPNOREPAIR if you also want to hide the Repair button). Now with only the Modify button, users will always enter the full UI and then select the desired operation from the MaintenanceType dialog.
Stefan Krüger
InstallSite.org twitter facebook
Posted 12 September 2012 - 07:25
1) Delete my custom uninstall entry using RemoveRegistry:
Software\Microsoft\Windows\CurrentVersion\Uninstall\[MyApplication]
Successfully passed
2) Change the value of "SystemComponent" to "0" in order to unhide items from ARP.
Change it under: Software\Microsoft\Windows\CurrentVersion\Uninstall\[PRODUCT_CODE]
I tried to change it in two ways:
• System Configuration -> Registry ….
• Change property ARPSYSTEMCOMPONENT to 0
Failed, I could not change its value!
3) Change the value of "Disable Change button" to "No" from General Information
Failed, I could not change its value
Any Idea how can I do it?
Thanks,
Posted 12 September 2012 - 13:10
Posted 12 September 2012 - 17:22
Stefan Krüger
InstallSite.org twitter facebook
Posted 13 August 2014 - 10:35
I fill in the Patch Optimization with previous msi/msm. but still I see CreateFolder table with new entries of dynamically linked subfolders
Removal of dynamically linked subfolder are the only way to get ride of this error? I have ~200 subfolder from some third party software
are there any other alternatives to get ride of this patch build error?
many thanks in advance.
QUOTE Yes - i must enable to remove the patch, Why do you think its a problem?Many patches can't be uninstalled, so I thought maybe you could live with this limitation.
Did you add or change any *folders* in the new version?
Did you add or change any files in the new version?
Did you remove any files or folders?
Or did you only change some existing files that are included ion dynamic components?
When you run the build wizard, do you fill in the Patch Optimization field? (see screenshot). It should help keeping the IDs unchanged.
Posted 19 August 2014 - 08:46
You can drag your folder structure from source to destionation view and InstallShield will automatically create components for you.
Stefan Krüger
InstallSite.org twitter facebook