hello Peter Shirtcliffe,

Thank you for your replay. I found out why the Windows Installer limits it,
because of the limitation of the windows registry. The Windows Installer
saves the values to the ARP (Add/Remove Programs) properties in the registry
and there is the version key saved as a DWORD. So there is no more space for
larger numbers in the version registry key!
Therefore I wrote a workaround as a wxi-include file. My workaround has one
disadvantage, the light.exe claims about this part:
...\inc\Upgrade.wxi(14) : warning LGHT1076 : ICE61 : This product should
remove only older versions of itself. No Maximum version was detected for
the current product. (OLD_PRODUCT_CODE)

So, below you can find my solution as wix source code. If anybody has a
better idea to deal with it, please let me know.
Thank you

Thomas Mathis


<!--
Workaround for the limitation of msi and windows registry of the version
information.

The version data of ARP (Add/Remove Programms) are saved in the windows
registry as an integer of DWORD.
This include file replaces some part of the internal WiX function Upgrade
and saves the value as string
REG_SZ in the windows registry. With that you can expand the version
information of more numbers.

The version data $(var.InvernalVersion) should be saved as a string of
numbers!
For example (please remove the "-" characters before use it):
        <-?define InvernalVersion="2103000120753" ?->
-->
<Include>
        <Upgrade Id="PUT-GUID-HERE">
                <UpgradeVersion OnlyDetect="no" Minimum="0.0.0.0" 
IncludeMinimum="yes"
Property="OLD_PRODUCT_CODE" />
        </Upgrade>
        
        <!-- Properties -->
        <Property Id="INTERNAL_VERSION_NEW" Value="$(var.InvernalVersion)" />
        <Property Id="UPGRADE_VBSCRIPTS">
                <![CDATA[
                        Sub GetHighestInternalVersion()
                                Set objShell = CreateObject("WScript.Shell")
                                verResult = ""
                                For Each sProductCode In 
Split(Session.Property("OLD_PRODUCT_CODE"),
";", -1, 1)
                                        verTemp =
objShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\"
& sProductCode & "\InternalVersion")
                                        If verTemp > verResult Then
                                                verResult = verTemp
                                        End If
                                Next
                                Session.Property("INTERNAL_VERSION_OLD") = 
verResult
                        End Sub
                ]]>
    </Property>
        
        <!-- CustomActions -->
        <CustomAction Id="InstalledProductFound"
VBScriptCall="GetHighestInternalVersion" Property="UPGRADE_VBSCRIPTS" />
        <CustomAction Id="NewerVersionFound"
Error="!(loc.ErrorNewerVersionInstalled)" />
        
        <!-- Verion Checker, prevent downgrading -->
        <InstallUISequence>
                <Custom Action="InstalledProductFound" 
After="FindRelatedProducts">
                        <![CDATA[OLD_PRODUCT_CODE]]>
                </Custom>
                <Custom Action="NewerVersionFound" 
After="InstalledProductFound">
                        <![CDATA[INTERNAL_VERSION_OLD > INTERNAL_VERSION_NEW]]>
                </Custom>
        </InstallUISequence>
        
        <InstallExecuteSequence>
                <Custom Action="InstalledProductFound" 
After="FindRelatedProducts">
                        <![CDATA[OLD_PRODUCT_CODE]]>
                </Custom>
                <Custom Action="NewerVersionFound" 
After="InstalledProductFound">
                        <![CDATA[INTERNAL_VERSION_OLD > INTERNAL_VERSION_NEW]]>
                </Custom>
        </InstallExecuteSequence>
        
        <!--Saves the internal Version-->
        <DirectoryRef Id="PUT-YOUR-DIR-ID-HERE">
                <Component Id="cmpInternalVersion" Guid="PUT-GUID-HERE">
                        <RegistryKey Root="HKLM"
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode]"
Action="createAndRemoveOnUninstall">
                                <RegistryValue Name="InternalVersion" 
Action="write" Type="string"
Value="$(var.InvernalVersion)"/>
                        </RegistryKey>
                </Component>
        </DirectoryRef>
</Include>

-- 
View this message in context: 
http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/error-CNDL0242-tp5153566p5159352.html
Sent from the wix-users mailing list archive at Nabble.com.

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to