Problems installing .msi with SCCM
Posted: Tue Jan 19, 2016 5:30 am
Hello,
I'm having issues with configuring an .msi installation that should be used for packaging and deployment by SCCM.
The main issue is that the reinstallation of the package is currently not possible without fiddling with the registry. From what I found, when SCCM installs this .msi, two keys get created under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[user sid]\Products\. The two keys there are both guids, both have been altered from their original versions, from 12345678-1234-1234-123456789ABC to 87654321-4321-4321-2143-21436587A9CB. I'm sad to say I do not understand why that is, but it's probably not important right now.
The original guids are the ProductCode as defined in InstallAware, and a random guid that gets embedded into the .msi as a different ProductCode in the Property table and that I can find using Orca (or even by just opening the .msi in notepad++ as plain text somewhere between all the binary data).
I've tested this kind of installation with some other products and my installation is one of the few that get registered in this way, and the only one that does so twice.
On an uninstallation, only the first key gets removed, the other, outer .msi ProductKey remains unchanged. Since SCCM seems to use these keys as a register of installed products, it will actively refuse to reinstall the package again while the outer .msi key exists. I have so far found no way to influence this behaviour, much less actually enabled the installation again. (without manually deleting the key or building a new .msi package)
Are there any pre-defined variables I'm missing, command line arguments that should be added or anything that would change this behaviour?
The .msi is currently created using the pgplwiz.exe (with the ALLUSERS=TRUE addition to the command line) because we still want the .exe in addition to the new .msi. I have tried using the Native Engine and building an .msi output from InstallAware directly, but I haven't noticed any significant changes regarding this behaviour (building the .msi directly does embed the correct Property,Manufacturer data in the .msi, there are a few more subtle changes, but that's about it).
I'm having issues with configuring an .msi installation that should be used for packaging and deployment by SCCM.
The main issue is that the reinstallation of the package is currently not possible without fiddling with the registry. From what I found, when SCCM installs this .msi, two keys get created under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\[user sid]\Products\. The two keys there are both guids, both have been altered from their original versions, from 12345678-1234-1234-123456789ABC to 87654321-4321-4321-2143-21436587A9CB. I'm sad to say I do not understand why that is, but it's probably not important right now.
The original guids are the ProductCode as defined in InstallAware, and a random guid that gets embedded into the .msi as a different ProductCode in the Property table and that I can find using Orca (or even by just opening the .msi in notepad++ as plain text somewhere between all the binary data).
I've tested this kind of installation with some other products and my installation is one of the few that get registered in this way, and the only one that does so twice.
On an uninstallation, only the first key gets removed, the other, outer .msi ProductKey remains unchanged. Since SCCM seems to use these keys as a register of installed products, it will actively refuse to reinstall the package again while the outer .msi key exists. I have so far found no way to influence this behaviour, much less actually enabled the installation again. (without manually deleting the key or building a new .msi package)
Are there any pre-defined variables I'm missing, command line arguments that should be added or anything that would change this behaviour?
The .msi is currently created using the pgplwiz.exe (with the ALLUSERS=TRUE addition to the command line) because we still want the .exe in addition to the new .msi. I have tried using the Native Engine and building an .msi output from InstallAware directly, but I haven't noticed any significant changes regarding this behaviour (building the .msi directly does embed the correct Property,Manufacturer data in the .msi, there are a few more subtle changes, but that's about it).