QuickPatch and .NET COM interop fails
I am using QuickPatch project (InstallShield 2020 R3 SP1 premier edition) to update a specific component (dll) from an old to newer version on a target machine.
The dll is a 3rdParty .NET COM Interop component.
The application which is patched uses this component as COM.
The original MSI project has this dll and it is a KeyFile and in the .NET settings the option
.Net COM Interop = Yes
In the QuickPatch project I added to the file list a newer version of this dll.
But when installing the patch on a system, the dll is indeed replaced but the application gets an error when trying to use it. The object is not found. I see that the registry still has the old COM interface. So it did not register the new component.
After inspecting the build log of the QuickPatch project I see no errors. I see nothing special in the installation log.
So I changed the QuickPatch project and checked the option "Extract COM information".
Then I see this in the build log:
Extracting COM data from 1 component(s)
ISDEV : warning -4354: The build was unable to extract COM information from the file D:\GITMANUAL\RISGITMANUAL\Packages\RISGdPicture\GdPicture\GdPicture.NET.14.dll in component GdPicture. Please ensure that the file is self-registering and verify that the self-registration process does not fail.
What is wrong here? I can not get this dll patched and registered on the target machine.
Is this a bug in InstallShield?
Did I set the properties wrong? Or are .NET COM Interop dll's not supported in QuickPatches?
Any help is welcome. At this point I'm stuck and have to idea where to find the issue and a solution.
So it seems that QuickPatch project does not support upgrading .NET COM Interop dll's which seems ridiculous.
When creating a build, the build process in "normal" MSI projects takes care of the registry information as it is extracted during build. We have two options here: COM extraction and .NET COM Interop extraction. But QuickPatch only offers one option, the COM extract.
So a changed dll is indeed part of the patch and will be copied to the target machine when installed. But the registry is untouched as there is no registry info available.
This is just a missing feature which can easily be added to the product. The action on build should be the same for normal MSI projects and QuikPatch projects.
Then you would say, as I did: well, if InstallShield does not add registry info, just add this info in the QuickPatch Registry section.
And now comes the funny part: QuickPatch project does not offer a "Import registry file".
In all other project types you are able to import REG files which are then added to the registry section. But QuickPatch let you only add, delete, edit keys one by one. There is no option for import.
So to add the registry info yourself you need to enter hundreds of registry keys by hand, depending on the dll's COM interface.
So that option is also blocked as it is impossible to enter it all manually.
Did anyone here find this issue out already and found out that QuickPatch is just an afterthought in InstallShield?
So for anyone having the same issues as described here info FYI.
After creating a ticket I got the response that:
QuickPatch does not support .NET COM Interop dll's now. The option "COM extraction" only applies to 'pure win32' COM. So when checking this option you get errors during build that no COM info cold be extracted.
The support for .NET COM Interop in QuickPatch is now added as a feature request and hopefully implemented in future InstallShield version ASAP.
The other issue, about not able to import reg files, is also a lacking QuickPatch feature.
There is no reason why this would not be available. In fact this is a must have feature as manually adding registry data is mostly too much work and prone to mistakes.
The "Import reg file" is now also added as a feature request.
In the end, not having one of both features makes QuickPatches and .NET COM Interop nearly impossible.