исправление с использованием только WIX

Я изо всех сил пытаюсь создать патч исключительно с помощью WIX, и я надеялся, что кто-нибудь сможет направить меня в правильном направлении.

У меня есть несколько сотен исходных файлов, и я запускаю их, чтобы создать файл урожая, а затем создаю пакет, используя свечу и свет.

Мне нужно изменить несколько файлов конфигурации, и я создаю второй пакет с изменениями.

Используя Torch и pyro, я создаю файл .wixmst, а затем, когда пытаюсь создать файл MSP, pyro жалуется на следующую ошибку.

pyro.exe : ошибка PYRO0252 : не были предоставлены допустимые преобразования для присоединения к исправлению. Убедитесь, что преобразования, которые вы передали в командной строке, имеют совпадающую базовую линию, созданную в патче. Кроме того, убедитесь, что между вашей целью и обновлением есть различия.

мой вопрос действительно таков: что должен содержать patch.wxs?

Вот как выглядит мой patch.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

    <Patch 
        AllowRemoval="yes"
        Manufacturer="sample llc" 
        MoreInfoURL="sample.com"
        DisplayName="Env Patch" 
        Description="Env Specfic Patch" 
        Classification="Update"
        >

        <Media Id="5000" Cabinet="RTM.cab">
            <PatchBaseline Id="RTM" />
        </Media>

        <PatchFamilyRef Id="EnvPatchFamily" />
    </Patch>

    <Fragment>    
        <PatchFamily Id='EnvPatchFamily' Version='1.0.0.0' ProductCode="PUT-GUID-HERE" Supersede='yes' >

            ********************************************** 
                What component Ref should I put in here
                heat creates a component group and I can't
                put ComponentGroupRef in here
            **********************************************

    </PatchFamily>
    </Fragment>
</Wix>

Я использую исправление Wix, как описано в этой ссылке: http://wix.sourceforge.net/manual-wix3/wix_patching.htm

Однако он не учитывает исходный файл wix, созданный с использованием тепла. Может кто-нибудь сказать мне, что я делаю неправильно здесь?


person soothsayer    schedule 24.04.2012    source источник


Ответы (3)


Хитеш,

Для меня тепло создает группу компонентов следующим образом:

<Fragment>
    <ComponentGroup Id="MyFiles">
        <ComponentRef Id="cmp2AA1A30564C621322ECB3CDD70B1C03C" />
        <ComponentRef Id="cmp788C978F16E473D4FD85720B5B75C207" />
    </ComponentGroup>
</Fragment>

тепловая команда:

"%WIX%\bin\heat.exe" dir slndir\bin\Release -cg MyFiles -gg -scom -sreg -sfrag -srd -dr INSTALLDIR -out ..\Wix\MyFiles.wxs -var var.BinOutputPath -nologo -v -ke  -t wixtransform.xsl

И в patch.wxs:

<Fragment>    
    <PatchFamily Id='ProductPatchFamily' Version='1.3.0.0' Supersede='yes'>
        <ComponentRef Id="cmp2AA1A30564C621322ECB3CDD70B1C03C" />
        <ComponentRef Id="cmp788C978F16E473D4FD85720B5B75C207" />
    </PatchFamily>
</Fragment>

Внимание: в теге PatchFamily нет атрибута ProductCode

person MariusCC    schedule 26.04.2012
comment
Да, вы правы насчет ProductCode, и я удалил его. Но на самом деле мой вопрос заключался в том, что я должен помещать в элемент PatchFamily, который, как я понял, не должен содержать ничего. Тем не менее спасибо за ответ. Я собираюсь принять ваш ответ за указание удалить атрибут ProductCode. благодаря. - person soothsayer; 26.04.2012
comment
Извините, я торопился и пропустил тот факт, что patch.wxs был скрыт. Если вы оставите его пустым, патч обновит все различные файлы. В противном случае он обновит только то, что вы выберете. - person MariusCC; 26.04.2012

Я также хотел бы упомянуть, что элементы PatchFamily являются необязательными при создании патча и предназначены для точного контроля над тем, что именно будет исправлено. В большинстве случаев я обнаружил, что хочу включить все различия между двумя версиями MSI при создании патча, и в этом случае я вообще опускаю PatchFamily. В вашем случае получившийся патч WXS будет выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Patch 
        AllowRemoval="yes"
        Manufacturer="sample llc" 
        MoreInfoURL="sample.com"
        DisplayName="Env Patch" 
        Description="Env Specfic Patch" 
        Classification="Update"
    >
        <Media Id="5000" Cabinet="RTM.cab">
            <PatchBaseline Id="RTM" />
        </Media>
    </Patch>
</Wix>

Я надеюсь, что этот ответ поможет любому, у кого есть похожий вопрос, то есть не желающие вручную создавать семейства исправлений, не желающие вручную включатьComponentRef каждый раз, когда им нужно создать исправление.

person pixelTitan    schedule 18.06.2018

Я столкнулся с той же проблемой, исправление этой ошибки заключается в добавлении GUID к компоненту, и он должен оставаться одинаковым для обеих версий msi.

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="WixPatch" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>
</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="WixPatch" />
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER" >
         <Component Id="File1" **Guid="3A64BE7A-BBEC-40AD-8319-45C602734146"**>
     <File Source="D:\V2\File1.txt" Name="File1" KeyPath="yes" DiskId="1" Id="F1"/>
         </Component>

</ComponentGroup>
</Fragment>

person Noora Akhtar    schedule 16.12.2015