1

I'm trying to compile msp, between empty setup and setup with 1 file: empty.wsx:

    <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="71478e9e-07b8-4ccf-b46c-ac42d34cb439"
        Name="AproductClient"
        Language="1033"
        Version="4.0.0"
        Manufacturer="Aproduct(c)"
        UpgradeCode="71478e9e-07b8-4ccf-b46c-ac42d34cb439">
        <Package InstallerVersion="405" Compressed="yes" Platform="x64" SummaryCodepage="Windows-1252" Languages="1033" InstallScope="perMachine" />
        <MediaTemplate CompressionLevel="high" EmbedCab="no" MaximumUncompressedMediaSize="512" />
        <FeatureRef Id="Complete"/>
    </Product>

    <Fragment>
        <Feature Id="Complete" Title="Complete" Level="1">
        </Feature>
    </Fragment>

    <Fragment>
    </Fragment>


</Wix>

setup with 1 file:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="71478e9e-07b8-4ccf-b46c-ac42d34cb439" Name="AproductClient" Language="1033" Version="4.0.0" Manufacturer="Aproduct(c)" UpgradeCode="71478e9e-07b8-4ccf-b46c-ac42d34cb439">
        <Package InstallerVersion="405" Compressed="yes" Platform="x64" SummaryCodepage="Windows-1252" Languages="1033" InstallScope="perMachine" />
        <MediaTemplate CompressionLevel="high" EmbedCab="no" MaximumUncompressedMediaSize="512" />
        <FeatureRef Id="Complete" />
    </Product>
    <Fragment>
        <Feature Id="Complete" Title="Complete" Level="1">
            <ComponentRef Id="Component_ProgramFiles64Folder.Aproduct.AproductPlus.bin" />
        </Feature>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="ProgramFiles64Folder.Aproduct.AproductPlus.bin">
            <Component Id="Component_ProgramFiles64Folder.Aproduct.AproductPlus.bin" Guid="12df9f76-78a1-45fd-985d-9792ad0ebd85" Win64="yes">
                <File Id="_test.txt" Source="C:\tmp\patch1\test.txt" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder" Name="ProgramFiles64Folder">
                <Directory Id="ProgramFiles64Folder.Aproduct" Name="Aproduct">
                    <Directory Id="ProgramFiles64Folder.Aproduct.AproductPlus" Name="AproductPlus">
                        <Directory Id="ProgramFiles64Folder.Aproduct.AproductPlus.bin" Name="bin">
                            <Directory Id="ProgramFiles64Folder.Aproduct.AproductPlus.bin.plugins" Name="Plugins"></Directory>
                        </Directory>
                    </Directory>
                </Directory>
            </Directory>
        </Directory>
    </Fragment>
</Wix>

patch definition:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Patch Manufacturer="Aproduct(c)" MoreInfoURL="http://www.Aproduct.com" DisplayName="MF 4.0.111.222 05" Description="2018.02.01.05: Manual number 5 of 2018.02 SP 1" Classification="Update" AllowRemoval="yes">
        <Media Id="5000" Cabinet="RTM.cab">
            <PatchBaseline Id="RTM" />
        </Media>
        <PatchFamilyRef Id="PatchFamily01" />
    </Patch>
    <Fragment>
        <PatchFamily Id="PatchFamily01" Version="18.2.1.122" Supersede="yes">
            <ComponentRef Id="Component_ProgramFiles64Folder.Aproduct.AproductPlus.bin" />
        </PatchFamily>
    </Fragment>
</Wix>

test.txt not installed by msp. unclear why: build log:

C:\sample\roman\manualfix>call candle.exe .\empty.wxs -out .\gen\empty.wixobj
Windows Installer XML Toolset Compiler version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.

empty.wxs

C:\sample\roman\manualfix>call light.exe .\gen\empty.wixobj -out gen\empty.msi
Windows Installer XML Toolset Linker version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.

C:\Users\rbelinsky\AppData\Local\Temp\olmptr31\empty.msi : warning LGHT1076 : ICE71: The Media table has no entries.

C:\sample\roman\manualfix>call candle.exe .\manualfix.wxs -out .\gen\manualfix.wixobj
Windows Installer XML Toolset Compiler version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.

manualfix.wxs

C:\sample\roman\manualfix>call light.exe .\gen\manualfix.wixobj -out gen\manualfix.msi
Windows Installer XML Toolset Linker version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.


C:\sample\roman\manualfix>torch.exe -p -xi gen\empty.wixpdb gen\manualfix.wixpdb -out gen\diff.wixmst
Windows Installer XML Toolset Transform Builder version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.


C:\sample\roman\manualfix>candle.exe manualfix-msp.wxs -out gen\manualfix-msp.wixobj
Windows Installer XML Toolset Compiler version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.

manualfix-msp.wxs

C:\sample\roman\manualfix>light.exe gen\manualfix-msp.wixobj -out gen\manualfix-msp.wixmsp
Windows Installer XML Toolset Linker version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.


C:\sample\roman\manualfix>pyro.exe gen\manualfix-msp.wixmsp -t RTM gen\diff.wixmst -out out\manualfix.msp
Windows Installer XML Toolset Patch Builder version 3.10.3.3007
Copyright (c) .NET Foundation and contributors. All rights reserved.

pyro.exe : warning PYRO1110 : Component 'Component_ProgramFiles64Folder.Dalet.DaletPlus.bin' was added to feature 'Complete' in the transform 'C:\sample\roman\manualfix\gen\diff.wixmst'. If you cannot guarantee that this feature will always be installed, you should consider adding new components to new top-level features to prevent prompts for source when installing this patch.

C:\sample\roman\manualfix>del /q/f install.log

C:\sample\roman\manualfix>msiexec /p out\manualfix.msp /qb /l*vx install.log

installation log: https://gist.github.com/kain64/9f58f8680dd49ad94d6db3831d65eb42 any idea

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
kain64b
  • 2,258
  • 2
  • 15
  • 27

1 Answers1

-1

Attack of The Clones: Did you put dummy GUIDs in place before posting online? By the looks of it you have set the product code identical to the upgrade code. Oh the humanity! :-) I am baffled if that actually compiled. I honestly don't really know what will happen, but it is definitely wrong.

Suggestions: 1) Ensure product and upgrade codes are different. 2) Clean up your system of old patches before testing again, or better yet set up a virtual machine for testing. 3) Discuss with your manager the exact requirements for your setup - you have to work with technology limitations (that are unfortunate, undeniable and challenging - and, may I add, not my fault - a mere messenger with enough practical experience to be able to say this with confidence).


Previous Test Patches: Glancing at the log I wonder if you have made a lot of patches that still are present on your test box. Are you using a clean virtual for this testing? I think you should.Generally all your own deployment testing should be done clean on virtuals I think.

Patching, a Delivery Mechanism: An important thing to understand is that a patch is just a delivery mechanism for an upgrade that already has to work. In other words you need to test that the minor or major upgrade that you create the patch for actually works when installed as an MSI before you package is as an MSP. If it does not, then the patch will never work either.

Patching: Patching is complicated, and error prone. Major upgrade patches are especially clunky and not recommended - I have only managed to make them work when the uninstall of the old version is postponed until the end of the installation process. Minor upgrade patches are only possible when you carefully plan and manage the release process. I wrote up this answer earlier on the limitations of minor upgrades (recommended read - and please read don't skim this one - this is important for your process and relese).

Product-, Package- & UpgradeCode: And here is another answer: On the differences between package-, product- and upgrade codes (just the first part - to understand what the upgrade code is for - ignore the rest of the answer).

Installshield's Help File: I will end with a direct link to Installshield's help file, since the content is very good. This is a table which shows you what separates the different types of Windows Installer upgrades. Pay particular attention to the fact that for a minor upgrade you need to use the same file name for the MSI file for both releases! I always stumble on this requirement. A lot more important details like these can be found in the linked answer on minor upgrades. Please read it.

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164